在套接字上产生超过 5 个客户端请求
Posted
技术标签:
【中文标题】在套接字上产生超过 5 个客户端请求【英文标题】:Spawning more than 5 client requests on socket 【发布时间】:2013-12-08 15:20:37 【问题描述】:如果我们像这样绑定服务器套接字:
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host,port))
server.listen(5)
并使用 select() 之类的东西,并在每个客户端连接上循环,直到客户端关闭它以交换消息,同时循环(for 这里)同时运行,我们可以进行服务器的交换-客户端消息或客户端-客户端交换并发。我们可以吗?
但我读到的问题是服务器无法将超过 5 个客户端排入队列以逐个处理;
有什么方法可以实际运行多个这样的服务器实例,前提是如果排队的客户端达到 5 级,多个这样的服务器进程开始监听?
【问题讨论】:
【参考方案1】:当您收到连接时,您可以生成一个线程/进程来处理该连接。
在主线程返回监听另一个连接
第 5 位是一个持有的列表的长度。
类似于总机操作员
【讨论】:
我不明白。当服务器为该“客户端”创建客户端套接字时,您的意思是将此侦听器编号减 1? (5 下降到 4?)即使客户端套接字正在积极参与? 当有人尝试连接到您的服务器时,计数器会从 5 减少到 4。当您接受创建“客户端套接字”的连接时,计数器会重新增加到 5。【参考方案2】:您关心的 5 个限制是侦听器积压队列的大小。这是系统将暂停的连接数,直到它开始拒绝新连接。当您accept
时,该队列上的连接室被释放。因此,只要您及时接受连接,在正常负载条件下这并不是真正的问题。 (顺便说一句,5 处于低端。IIR 例如,Linux 上每个进程的默认最大值为 128。)
【讨论】:
【参考方案3】:您可能误解了 backlog 参数的功能。 5 的限制仅适用于尚未接受的连接。
【讨论】:
我只是要求在下面帖子的评论部分澄清这个疑问以上是关于在套接字上产生超过 5 个客户端请求的主要内容,如果未能解决你的问题,请参考以下文章
C 套接字可以在没有客户端关闭连接的情况下接收 0 个字节吗?