2012-07-30 39 views
2

我正在开发一个群聊应用程序来学习如何使用套接字,线程(也许)和asycore模块(也许)。 我的想法是客户端 - 服务器体系结构,以便当客户端连接到服务器时,服务器向客户端发送其他连接(其他客户端'用户名',ip地址)列表,然后一个人可以连接到一个或更多的人在一次和服务器将建立一个客户端之间的P2P连接。我有套接字部分工作,但服务器一次只能处理一个客户端连接。
什么是处理多重连接的最佳,最常见,最实用的方法? 当我的新连接进入服务器,然后连接不同的客户端连接,或使用asycore模块,我知道使服务器将相同的数据发送到多个套接字(连接)和我只需要调整数据的位置。使用线程或asycore在Python中的群聊应用程序

任何帮助/想法/建议,将不胜感激。

回答

1

对于一组聊天应用,一般的方法将是:

服务器侧(接受处理):

  • 创建插座,将其绑定到一个众所周知的端口(和适当的接口)和听
  • 虽然(app_running)
    • Client_socket =接受(使用的ServerSocket)
    • 产生新线程,并通过此socke t到线程。该线程处理刚刚连接的客户端。
    • 继续,以便服务器可以继续接受更多连接。

服务器端客户端MGMT主题:

  • 而app_running:
    • 读取传入消息,并存储到队列或东西。
    • 继续

服务器端(群聊处理):

  • 对于所有连接的客户端:
    • 检查他们的队列。如果任何消息存在,发送到所有连接的客户端(包括发送此消息的客户 - 用作ACK那种)

客户端:

  • 创建套接字
  • 通过IP地址连接到服务器,端口
  • 做发送/接收。

上面可以有很多改进。就像服务器可以轮询套接字或在一组套接字上使用“select”操作一样。这会使它更有效率,因为每个连接的客户端都有一个单独的线程会有很多时候会过量。 (想想每个线程1MB的堆栈)。 PS:我还没有真正使用过asyncore模组。但我只是猜测,你会发现一些性能改善,当你有很多连接的客户端和非常少的处理。

+0

虽然做了一些更多的挖掘我在Python中读取,它会更好地使用进程比线程。使用其中一种还是有优势/劣势? – 2012-07-31 13:22:48

相关问题