如果我们绑定这样的服务器套接字:
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host,port))
server.listen(5)
并使用select()之类的东西并遍历每个客户端连接,直到客户端关闭它以交换消息,同时循环( for 此处)同时运行我们可以进行服务器的交换-client消息或客户端 - 客户端交换并发。我们可以吗?
但我读过的问题是服务器无法将超过5个客户端排入队列中逐个处理;
实际运行多个此类服务器实例的方法有哪些,前提是有多个此类服务器进程开始侦听,如果排队的客户端达到5级?
答案 0 :(得分:2)
当您收到连接时,您可以生成一个线程/进程来处理该连接。
在主线程上返回以侦听另一个连接
5位是一次保持的列表长度。
类似于总机操作员
答案 1 :(得分:1)
可能你误解了积压参数的功能。 限制5仅适用于尚未接受的连接。
答案 2 :(得分:1)
您关注的5个限制是侦听器积压队列的大小。这是系统暂停多少连接,直到它开始拒绝新连接。当accept
在该队列上释放连接空间时。因此,只要您及时接受您的连接,在正常负载条件下这不是真正的问题。 (顺便说一句,BTW 5是偏低的。例如,IIR是linux上每个进程的默认最大值,为128.)