我正在尝试构建一个处理多个客户端的聊天服务器。我试图在新线程上处理每个连接的客户端。问题是我真的很困惑如何将从客户端收到的消息转发给预期的接收者。我的意思是客户端1到客户端5。我是套接字编程的新手。所以对任何形式的帮助表示赞赏。
答案 0 :(得分:1)
这是您的服务器的伪设计。我将用编程语言不可知的术语发言。
有一个“全局哈希表”,它将“客户端ID号”映射到相应的“套接字”(以及任何其他客户端数据)。对此哈希表的任何访问都使用互斥锁进行保护。
每次接受新连接时,都会启动一个线程。我假设您的聊天协议中有一些内容,客户端会识别自己,获取分配的客户端ID号,并添加到会话中。该线程做的第一件事是将此客户端连接的套接字添加到哈希表。
每当消息进入(例如,从客户端1到客户端5)时,在哈希表中查找“客户端5”以获得其套接字。转发此套接字上的消息。
有一些竞争条件可以解决,但这应该是一个不错的设计。
当然,如果你真的想扩展,你就不会做“每个连接的线程”方法。但是如果你被限制在大约100个或更少的客户端同时连接,你会没事的。之后,您应该考虑使用非阻塞i / o的单线程方法。