【发布时间】:2018-06-22 23:34:10
【问题描述】:
我是 Python 新手,最近对套接字编程很感兴趣。从 youtube 视频中,我正在构建一个简单的服务器,但我没有很好地获得 listen() 方法。我知道“它侦听”传入连接,但我没有在文档中得到“最大排队连接”的想法。能否通俗地解释一下这个概念,以便我更好地理解?
【问题讨论】:
我是 Python 新手,最近对套接字编程很感兴趣。从 youtube 视频中,我正在构建一个简单的服务器,但我没有很好地获得 listen() 方法。我知道“它侦听”传入连接,但我没有在文档中得到“最大排队连接”的想法。能否通俗地解释一下这个概念,以便我更好地理解?
【问题讨论】:
socket.listen 在 Python 中调用底层的listen syscall:
listen()将 sockfd 引用的套接字标记为被动套接字,即将使用accept(2)接受传入连接请求的套接字。
被动套接字是您非正式地称为服务器的套接字。
backlog 参数定义了 sockfd 的挂起连接队列可以增长到的最大长度。如果队列已满时连接请求到达,客户端可能会收到带有
ECONNREFUSED指示的错误,或者,如果底层协议支持重传,则可能会忽略该请求,以便稍后重新尝试连接成功。
换句话说,当您调用sock.listen(5) 并且在您调用accept 之前有6 个连接请求进入时,其中一个会被丢弃。在实践中,the value is only a hint to the OS。
除非您的应用程序或其使用场景非同寻常,否则请传入任何值(通常引用 5)并完成。只需确保在 accept 调用之间没有太多开销,待处理连接的队列永远不会满,而且一开始就很少使用。
【讨论】: