【问题标题】:Spawning more than 5 client requests on socket在套接字上产生超过 5 个客户端请求
【发布时间】: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 级,多个这样的服务器进程开始监听?

【问题讨论】:

    标签: python sockets


    【解决方案1】:

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

    在主线程返回监听另一个连接

    第 5 位是一个持有的列表的长度。

    类似于总机操作员

    【讨论】:

    • 我不明白。当服务器为该“客户端”创建客户端套接字时,您的意思是将此侦听器编号减 1? (5 下降到 4?)即使客户端套接字正在积极参与?
    • 当有人尝试连接到您的服务器时,计数器会从 5 减少到 4。当您接受创建“客户端套接字”的连接时,计数器会重新增加到 5。
    【解决方案2】:

    您关心的 5 个限制是侦听器积压队列的大小。这是系统将暂停的连接数,直到它开始拒绝新连接。当您accept 时,该队列上的连接室被释放。因此,只要您及时接受连接,在正常负载条件下这并不是真正的问题。 (顺便说一句,5 处于低端。IIR 例如,Linux 上每个进程的默认最大值为 128。)

    【讨论】:

      【解决方案3】:

      您可能误解了 backlog 参数的功能。 5 的限制仅适用于尚未接受的连接。

      【讨论】:

      • 我只是要求在下面帖子的评论部分澄清这个疑问
      猜你喜欢
      • 2011-08-26
      • 2012-10-27
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 2011-07-31
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多