我正在开发一个群聊应用程序来学习如何使用套接字,线程(可能)和asycore模块(可能)。 我的想法是有一个客户端 - 服务器架构,以便当客户端连接到服务器时,服务器向客户端发送其他连接的列表(其他客户端'用户名',ip地址),然后一个人可以连接到一个或多个人们一次和服务器将在客户端之间建立P2P连接。我有套接字部分工作,但服务器一次只能处理一个客户端连接 处理多个连接的最佳,最常见,最实用的方法是什么? 每当我的新连接进入服务器然后将不同的客户端连接连接在一起时,我是否创建一个新的进程/线程;或者使用asycore模块,根据我的理解,使服务器将相同的数据发送到多个套接字(连接)和I只需要规范数据的去向。
任何帮助/想法/建议将不胜感激。
答案 0 :(得分:1)
对于群聊应用程序,一般方法是:
服务器端(接受流程):
服务器端客户端mgmt线程:
服务器端(群聊处理):
客户方:
上面可以有很多改进。就像服务器可以轮询套接字或在一组套接字上使用“select”操作一样。这将使其高效,因为当有很多时,为每个连接的客户端设置一个单独的线程将是过量的。 (想想堆叠每个线程大约1MB)。
PS:我还没有真正使用asyncore
模块。但是我只是猜测当你有很多连接的客户端和非常少的处理时,你会发现一些性能提升。