我正在尝试构建一个处理多个客户端的聊天服务器。我正在尝试在新线程上处理每个连接的客户端。问题是我真的很困惑如何将从客户端收到的消息转发到预期的接收者。我的意思是客户端 1 到客户端 5。我对套接字编程很陌生。因此,我们将不胜感激任何形式的帮助。
问问题
1728 次
1 回答
1
这是您的服务器的伪设计。我将用与编程语言无关的术语发言。
有一个“全局哈希表”,将“客户端 ID 号”映射到相应的“套接字”(以及任何其他客户端数据)。对该哈希表的任何访问都由互斥锁保护。
每次接受新连接时,启动一个线程。我假设您的聊天协议中有一些内容,其中客户标识自己,获得分配的客户 ID 号,并被添加到会话中。线程做的第一件事就是将此客户端连接的套接字添加到哈希表中。
每当有消息进入时(例如从客户端 1 到客户端 5),在哈希表中查找“客户端 5”以获取其套接字。转发此套接字上的消息。
有一些比赛条件需要解决,但这应该是一个足够体面的设计。
当然,如果你真的想扩展,你不会采用“每个连接线程”的方法。但是,如果您被限制为同时连接大约 100 个或更少的客户端,您就可以了。之后,您应该考虑使用非阻塞 i/o 的单线程方法。
于 2012-12-23T10:07:26.007 回答