|
|
1
19
监听积压是,
as Pieter said
,操作系统用来存储已被TCP堆栈接受但尚未被程序接受的连接的队列。从概念上讲,当一个客户机连接时,它被放在这个队列中,直到
因此,listen backlog是一个可用于帮助服务器处理并发连接尝试高峰的优化参数。请注意,这与并发连接尝试中的峰值有关,并且与服务器可以维护的最大并发连接数无关。例如,如果您有一个服务器,每秒接收10个新的连接,那么即使在长时间使用这些连接并且服务器支持10000个并发连接(假设您的服务器不在为现有连接服务的CPU上注销)的情况下,调整监听积压也不太可能有任何影响。。但是,如果服务器在每秒接受1000个新连接时偶尔遇到短时间问题,则可以通过调整侦听积压以提供更大的队列,从而为服务器提供更多的调用时间,从而防止某些连接被拒绝
至于优点和缺点,优点是可以更好地处理并发连接尝试中的峰值,相应的缺点是操作系统需要为侦听积压队列分配更多空间,因为它更大。所以这是一个性能与资源的权衡。 就我个人而言,我使监听积压可以通过配置文件进行外部调整。
如何以及何时调用listen和accept取决于所使用的套接字代码的样式。用你会调用的同步代码
对于异步套接字,它可能有点不同,如果您使用async-accepts,您将像以前一样监听一次,然后发布几个(同样可配置的)async-accepts。当其中每一个完成时,您将处理新连接并发布一个新的异步接受。通过这种方式,您有一个侦听积压队列和一个挂起的接受“队列”,因此您可以更快地接受连接(此外,异步接受是在线程池线程上处理的,因此您没有一个紧密的接受循环)。这通常更具可伸缩性,并为您提供了两个调整点,以处理更多并发连接尝试。 |
|
|
2
3
backlog所做的是为试图连接到服务器但尚未处理的客户机提供一个队列。
这关系到客户机实际连接到服务器和您
如果接受客户机需要很长时间,则可能积压工作已满,新的客户机连接将被拒绝,直到您有时间处理队列中的客户机。 关于你的问题:
|
|
|
3
3
试试这个程序,你会发现什么是积压好。
|