标题:[实践OK]关于swoole里面的通讯四次挥手问题。 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Tue, 17 Sep 2019 11:18:34 +0000 作者:jackxiang 地址:http://jackxiang.com/post/10292/ 内容: server.php on('connect', function ($server, $fd){ echo "connection open: {$fd}\n"; }); $server->on('receive', function ($server, $fd, $reactor_id, $data) { $server->send($fd, "Swoole: {$data}"); $server->close($fd); }); $server->on('close', function ($server, $fd) {#Sleep在里面后,Sleep函数的出现无法调底层的Close方法,导致出现服务端一直处于CLOSE_WAIT,出现连接状态,客户端在FIN_WAIT2状态。 echo "connection close: {$fd}\n"; #die(); # 进程通出 sleep(1000); }); $server->start(); ACCEPT队列(全连接队列):由listen()函数的第二个参数 backlog 指定,内核硬限制由 net.core.somaxconn 限制,即实际的值由min(backlog,somaxconn) 来决定。表示已完成连接的队列,等待被 accept系统调用取走。 php server.php connection open: 1 [2019-09-17 06:47:18 *9116.0] NOTICE swFactoryProcess_finish (ERRNO 1004): send 25 byte failed, because connection[fd=1] is closed connection close: 1 client.php connect('127.0.0.1',6666)); $client->send("date to kill conn"); $client->close(); sleep(1000); netstat -lantp|grep 6666 tcp 0 0 127.0.0.1:48344 127.0.0.1:6666 FIN_WAIT2 - #客户端进入 FIN_WAIT2 状态 tcp 0 0 127.0.0.1:6666 127.0.0.1:48344 CLOSE_WAIT 9110/php #服务器端进入CLOSE_WAIT https://blog.csdn.net/Tanswer_/article/details/78375317 SYN队列(半连接队列):由/proc/sys/net/ipv4/tcp_max_syn_backlog指定,表示处于 SYN_RECV 状态的队列 ACCEPT队列(全连接队列):由listen()函数的第二个参数 backlog 指定,内核硬限制由 net.core.somaxconn 限制,即实际的值由min(backlog,somaxconn) 来决定。表示已完成连接的队列,等待被 accept系统调用取走。 原文链接:https://blog.csdn.net/Tanswer_/article/details/78375317 点击在新窗口中浏览此图片 https://img-blog.csdn.net/20171028140904098?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVGFuc3dlcl8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast cat /proc/sys/net/ipv4/tcp_max_syn_backlog 65535 cat /proc/sys/net/core/somaxconn 65535 Generated by Jackxiang's Bo-blog 2.1.1 Release