backlog

Listen队列长度,如backlog => 128,此参数将决定最多同时有多少个等待accept的连接。

关于tcp的backlog

我们知道tcp有三次握手的过程,客户端syn=>服务端syn+ack=>客户端ack,当服务器收到客户端的ack后会将连接放到一个叫做accept queue的队列里面(注1),队列的大小由backlog参数和配置somaxconn 的最小值决定,我们可以通过ss -lt命令查看最终的accept queue队列大小,swoole的主进程调用accept(注2)从accept queue里面取走。 当accept queue满了之后连接有可能成功(注4),也有可能失败,失败后客户端的表现就是连接被重置(注3)或者连接超时,而服务端会记录失败的记录,可以通过 netstat -s|grep 'times the listen queue of a socket overflowed'来查看日志。如果出现了上述现象,你就应该调大该值了。 幸运的是swoole与php-fpm/apache等软件不同,并不依赖backlog来解决连接排队的问题。所以基本不会遇到上述现象。