落花飞花
2018-04-02 09:17
采纳率: 25%
浏览 3.9k

python socket.listen(5)的问题

各位大神好,萌新在看各类python书籍时总是能看到这句代码,理解起来也很费劲,都说一般应用传5就够用了。百度上也都是说在连接被转接或拒绝时传入连接请求的最大数,超过这个值就拒绝了。仔细揣摩过几遍,还是理解不了。像做云平台的,同时可能有上万客户端同一时刻连接进来,难道只能每次接受5个用户么?其他的拒绝连接是不给连接,需要客户端重新请求?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • icyxing 2018-04-02 09:31
    已采纳

    你理解的没啥大问题。

    这个参数指定是**等待队列**的长度。

    也就是如果系统可以并发处理100个请求,同时到达106个请求,100个请求直接被处理,5个等待,第106个直接就拒绝。

    上万个请求进来,系统不是每次接受5个用户,而是可以让5个用户等待,系统每次接受的用户取决于系统吞吐量。

    而且一般应用传5就够了,一万个并发的应用显然也不是一般应用了

    2 打赏 评论
  • 好名字 2018-04-02 09:22

    Python的没有研究过,但是在c中,指的是服务器端可建立连接的客户端的队列长度,表示服务器已经经历的两次握手等待accept 系统调用,在linux高性能服务器编程一书中提到,现在这个backlog 只是给kernel 的一个建议值,实际上是可以稍大一点。如果我没有记错的话是这么描述的

    打赏 评论
  • yanping1456789 2018-04-02 09:24

    Python的没有研究过,但是在c中,指的是服务器端可建立连接的客户端的队列长度,表示服务器已经经历的两次握手等待accept 系统调用,在linux高性能服务器编程一书中提到实际上是可以稍大一点。如果我没有记错的话是这么描述的

    打赏 评论
  • weixin_40430588 2018-04-02 09:27

    书中是这样描述上面这个例子的: 尽管这个也可以工作, 但是它不能抵御有人试图通过创建大量线程让你服务器资源枯竭而崩溃的攻击行为。

    打赏 评论
  • fasionchan 2018-04-02 13:51

    之前因工作需要有研究过,或许对你有用:https://www.jianshu.com/p/7fde92785056

    打赏 评论

相关推荐 更多相似问题