我们来总结一下Swoole
内核中和连接关闭有关的各种标志位。
在swoole::Connection
结构里面:
1 | struct Connection { |
其中,
close_actively
代表服务器主动关闭了连接。
closing
代表服务器将要调用onClose
回调函数(但还未调用)。
closed
代表服务器已经调用完了onClose
回调函数。
close_queued
代表关闭连接的事件已经在排队了,一旦服务器要发送给客户端的数据发送完了,就会关闭对应的连接。这个东西是挂在对应的socket
的out_buffer
上的chunk
上面。
close_reset
代表要暴力关闭连接,不会等待send_buffer
的数据发送完之后关闭连接,所以这种关闭模式会产生RST
分节。
peer_closed
代表客户端主动关闭了连接。
protect
用来设置客户端连接为保护状态,不被心跳线程切断。
close_notify
心跳线程设置这个标志位,用来通知reactor
线程关闭连接。
close_force
当reactor
线程从管道里面收到SW_SERVER_EVENT_CLOSE_FORCE
类型的数据的时候,reactor
线程会去设置这个标志位。
last_time
代表这个连接最后一次收到数据的时间,单位是毫秒。
last_time_usec
代表这个连接最后一次收到数据的时间,单位是微秒。
理解这些标志位,对于处理一些连接泄漏的问题,会非常的有帮助。一旦某个进程连接泄漏了,我们可以attach
进这个进程里面,然后选一个泄漏的Connection
,看看这些标志位哪些是不正常的,就可以大概找到泄漏的原因。