整个swoole扩展可分为三层:
第一层:Master进程,master进程为swoole的主进程,用于处理swoole的核心的事件驱动的。master进程分为若干个Reactor线程(包括主线程 main reactor和子线程 reactor),在每一个reactor子线程当中,都运行了一个 * 函数实例,那么swoole对于事件的监听,都会在这些线程中实现,比如来自于客户端的连接,本地通讯用的管道以及异步操作的文件、文件描述符,都会在注册在 * 当中。
第二层:Manager进程,manager进程是一个管理进程,这个进程的作用是用于创建、管理。在manager进程不会运行任何用户层的业务逻辑,它仅仅用于管理和分配
第三层:工作进程, 工作进程分为两个类型,包括 worker进程 和 task进程。 worker进程是swoole的主逻辑进程,用于处理来自客户端的请求。task进程是swoole提供的异步进程,主要用于处理一些耗时较长的同步任务。
在swoole中,进程与进程之间的通讯是通过管道来实现的。
在master进程当中,reactor线程接受来自客户端的数据时,这些数据通过管道发送给worker进程,worker进程来处理。当worker进程需要投递任务到task进程当中时,也是通过管道,来实现整个任务的投递。
另外,可以通过设置swoole的配置参数来使得worker进程和task进程的通讯的联系 消息队列。
总结:
当一个新的客户端链接来到时,首先会被main reactor线程接收到,然后将这个链接的读写操作的监听注册到相应的reacto线程当中,并通知worker进程处理对应的on conecte,就是收到链接的回调。那么当客户端发送数据时,reacto线程会接收到这些数据,并通过管道发送给worker进程进行处理,worker进程如果需要投递任务,则同样通过管道投递到task进程来进行处理,处理完成后,返回给worker进程,worker进程通知reactor进程交回给客户端。完成整个请求。