【问题标题】:Python: multiple client threaded chat serverPython:多客户端线程聊天服务器
【发布时间】:2012-12-23 03:19:48
【问题描述】:

我正在尝试构建一个处理多个客户端的聊天服务器。我正在尝试在新线程上处理每个连接的客户端。问题是我真的很困惑如何将从客户端收到的消息转发到预期的接收者。我的意思是客户端 1 到客户端 5。我对套接字编程很陌生。因此,我们将不胜感激。

【问题讨论】:

  • 从这里开始:twistedmatrix.com
  • 不加捻就不能做吗?我真的很想了解实现它背后的想法。
  • 阅读 beej 的网络编程指南。它在 C 中,但 python 只是包装了相同的 API。

标签: python multithreading sockets client-server


【解决方案1】:

这是您的服务器的伪设计。我将用与编程语言无关的术语发言。

有一个“全局哈希表”,将“客户端 ID 号”映射到相应的“套接字”(以及任何其他客户端数据)。对该哈希表的任何访问都由互斥体保护。

每次接受新连接时,启动一个线程。我假设您的聊天协议中有一些内容,其中客户识别自己,获得分配的客户 ID 号,并被添加到会话中。线程做的第一件事就是将此客户端连接的套接字添加到哈希表中。

每当有消息进入时(例如,从客户端 1 到客户端 5),在哈希表中查找“客户端 5”以获取其套接字。转发此套接字上的消息。

有一些比赛条件需要解决,但这应该是一个足够体面的设计。

当然,如果您真的想扩展,您不会采用“每个连接线程”的方法。但是,如果您被限制为同时连接大约 100 个或更少的客户端,您会没事的。之后,您应该考虑使用非阻塞 i/o 的单线程方法。

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 2013-04-09
    • 2015-06-27
    • 2016-04-09
    • 1970-01-01
    • 2014-04-18
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多