Swoole进程协作

当客户端主动连入服务器的时候,客户端实际上是与Master主进程中的某个Reactor线程发生了连接。
当TCP三次握手成功后,由这个Reactor线程将连接成功的消息告知Manager管理进程,再由Manager管理进程转交给Worker工作进程,最终在Worker工作进程中触发onConnect事件对应的方法。
当客户端向服务器发送一个数据包的时候,首先接收到数据包的是Reactor线程,同时Reactor线程会完成组包,再将组装好的包交给Manager管理进程,由Manager管理进程转交给Worker工作进程,此时Worker工作进程触发onReceive事件。
如果Worker工作进程中做了处理操作后再使用Send方法将数据发回给客户端时,数据会沿着这个路径逆流而上。
Task任务进程用来处理一些占用时间较长的业务,主要处理Worker工作进程中占用时间较长的任务。
形象来说:

  1. Master主进程 = 业务窗口
  2. Reactor线程 = 前台接待员
  3. Manager管理进程 = 项目经理
  4. Worker工作进程 = 工人

当在业务窗口办理业务时,如果用户很多,后边的用户需要排队等待服务,Reactor负责与客户直接沟通,对客户的请求进行初步的整理(传输层级别的整理,组包),然后Manager负责将业务分配给合适的Worker,如空闲的Worker,最终Worker负责实现具体的业务。