早期除了reactor线程外,还设置了writer写成,用于监听worker进程的PIPE,写回TCP客户端。 1.6.12后将这2个角色做了合并,直接在reactor进程内监听PIPE,写回TCP客户端。
合并后的好处是,recv/send/close都是在同一个线程内完成的,不存在之前复杂的时序问题。一切变得更加简单了。另外outbuffer和sendfile也可以更轻松实现。
swoole_server::close和swoole_server::send都是通过PIPE向reactor线程发送一个包才完成的。不同的是close会发送一个len为0,仅包含头的包。
swServer_reactor_thread_onClose函数在发生close事件时被回调。