2013-12-08 88 views
0

超过5名客户端的请求。如果我们绑定的服务器套接字是这样的:产卵套接字

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server.bind((host,port)) 
server.listen(5) 

,并使用像select()方法和循环一遍又一遍每个客户端连接,直到客户端关闭它来交换消息而循环(这里为)同时运行,我们可以交换服务器 - 客户端消息或客户端 - 客户端交换并发。我们可以吗?

但我读过的问题是,服务器无法排队超过5个客户端来逐一处理;

实际运行多个此类服务器实例的方法有哪些,前提是多个此类服务器进程开始监听,如果排队等待的客户端达到5级?

回答

1

您关心的5个限制是侦听器积压队列的大小。这是系统将暂停多少连接,直到它开始拒绝新的连接。当你在该队列上释放一个连接空间时,你可以使用accept。所以只要您及时接受您的连接,在正常负载条件下这不是真正的问题。 (顺便提一下,在Linux上,默认的最大进程数是128.)

+0

以下线程我很好,128。不知道。谢谢澄清! – user2290820

2

当您收到一个连接时,您可以生成一个线程/进程来处理该连接。

在主线程回去听另一个连接

5位是一个保存列表的长度。

到总机接线员

+0

我不明白。当服务器为这个'client'创建一个客户端套接字时,你的意思是写这个监听器编号减1? (5下降到4?),即使客户端套接字是积极参与? – user2290820

+1

当有人试图连接到你的服务器时,计数器从5递减到4.当你接受创建“客户端套接字”的连接时,计数器重新递增到5. – smeso

1

类似也许你误解积压参数的功能。 5的限制仅适用于尚未被接受的连接。

+0

我刚才要求澄清评论中的怀疑部分在 – user2290820