onClose
TCP客户端连接关闭后,在worker进程中回调此函数。函数原型:
function onClose(swoole_server $server, int $fd, int $reactorId);
$server
:Server
对象$fd
:连接的文件描述符$reactorId
来自那个reactor
线程,主动close
关闭时为负数
onClose 回调函数如果发生了致命错误,会导致连接泄漏。通过 netstat 命令会看到大量 CLOSE_WAIT 状态的 TCP 连接
无论由客户端发起close还是服务器端主动调
用$serv->close()
关闭连接,都会触发此事件。因此只要连接关闭,就一定会回调此函数
onClose
中依然可以调用getClientInfo
方法获取到连接信息,在onClose
回调函数执行完毕后才会调用close
关闭TCP
连接
注意:这里回调onClose
时表示客户端连接已经关闭,所以无需执行$server->close($fd)
。代码中执行$serv->close($fd)
会抛出PHP
错误告警。
主动关闭
当服务器主动关闭连接时,底层会设置此参数为-1
,可以通过判断$reactorId < 0
来分辨关闭是由服务器端还是客户端发起的。
只有在
PHP
代码中主动调用close
方法被视为主动关闭
心跳检测
心跳检测是由心跳检测线程通知关闭的, 关闭时onClose的$reactorId
参数不为-1