我应该使用啥积压值?
Posted
技术标签:
【中文标题】我应该使用啥积压值?【英文标题】:What value of backlog should I use?我应该使用什么积压值? 【发布时间】:2012-04-17 16:10:35 【问题描述】:我读了man 2 listen。
我不明白什么是积压值,它说
backlog 参数定义了 sockfd 的挂起连接队列可以增长到的最大长度
对,我该如何定义什么是最佳价值?
谢谢
【问题讨论】:
socket listen backlog parameter, how to determine this value?的可能重复 【参考方案1】:基本上,listen()
积压影响的是,如果您的应用程序不是 accept()
ing 连接,则有多少传入连接可以排队。对于大多数应用程序来说,这并不是特别重要。大多数系统使用的最大值是 128,通过它通常是安全的。
【讨论】:
好吧,如果我listen(sockfd, 5)
,我应该在我的accept()
(在我的无限循环中)测试current_nb_client < 5
,以便向我的客户发送错误消息,或者我可以信任积压和在客户端处理这个?
不,这不是必需的——只要您在连接进入时立即接受连接,您的收听积压的长度是无关紧要的。您可以根据需要拥有任意数量的活动连接;侦听积压仅影响尚未完全建立的连接。
哦,我刚刚明白了!我认为他们不会从队列中消失。但不是!这是一个待处理的队列,我只需要accept()
每个人,它们就会从队列中消失。【参考方案2】:
这是试图连接的客户端之间的斗争。将接受请求推送到队列中,并且接受线程将它们吸走。通常,线程获胜。我通常设置为 32,但它通常不是一个重要的参数。
【讨论】:
好吧,如果我listen(sockfd, 5)
,我应该在我的accept()
(在我的无限循环中)测试current_nb_client < 5
,以便向我的客户发送错误消息,还是我可以信任积压和在客户端处理这个?
如果队列已满,连接尝试将被拒绝,但这种情况不太可能发生,您应该忘记它。必须有一些队列来覆盖那些刚刚发生大量连接请求突然出现的时间,但总的来说,今天的处理器/内存/操作系统/任何东西都可以轻松跟上繁忙的网络。 以上是关于我应该使用啥积压值?的主要内容,如果未能解决你的问题,请参考以下文章