标签:缓冲区 响应 try 文件 bsp 功能 tcp 模块 master
结构图如下:
swoole主要由Master进程(主进程)和Manager进程配合使用完成其功能。
是一个多线程的程序。其中有一组很重要的线程,称之为Reactor线程。它就是真正处理TCP连接,收发数据的线程。
管理worker/task进程。worker/task进程都是由Manager进程Fork并管理的。
主线程(Master进程)在Accept新的连接后,会将这个连接分配给一个固定的Reactor线程,并由这个线程负责监听此socket。在socket可读时读取数据,并进行协议解析,将请求投递到Worker进程。
TCP
连接、处理网络IO
、处理协议、收发数据C
代码,除Start
/Shudown
事件回调外,不执行任何PHP代码TCP
客户端发来的数据缓冲、拼接、拆分成完整的一个请求数据包Reactor
以多线程的方式运行类似与php-fpm进程。
Reactor
线程投递的请求数据包,并执行PHP
回调函数处理数据Reactor
线程,由Reactor
线程发送给TCP
客户端Worker
以多进程的方式运行异步处理其他任务的进程,使用方方式类似与Gearman。
Worker
进程通过swoole_server->task/taskwait
方法投递的任务swoole_server->finish
)给Worker
进程TaskWorker
以多进程的方式运行可以理解为Reactor
就是nginx
,Worker
就是php-fpm
。Reactor
线程异步并行地处理网络请求,然后再转发给Worker
进程中去处理(在回调函数中处理)。Reactor
和Worker
间通过UnixSocket
进行通信。
了解swoole事件处理流程,先了解两种网络事件处理模式。
它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程/进程(逻辑单元)。除此之外,主线程不做任何其他工作。读写数据,接受新的连接,以及处理客户请求均在工作线程中完成。
使用I/O异步模型实现Proactor模式。原理:将所有I/O操作都交给主线程,主线程配合和内核来处理,业务逻辑操作就交给逻辑单元。例如使用aio_read来实现。
工作流程:
使用I/O同步模型实现Proactor模式。原理:主线程执行I/O事件数据的读写操作,业务逻辑操作就交给逻辑单元。例如使用epoll来实现。
工作流程:
从图可以看出,如果我们把Reactor线程和Work进程组合起来,看成工作线程的话,swoole使用的是reactor事件处理模式。
一个请求经历的步骤如下:
1. 服务器主线程等待客户端连接。
2. Reactor线程处理接连socket,读取socket上的请求数据(Receive),将请求封装好后投递给work进程。
3. Work进程就是逻辑单元,处理业务数据。
4. Work进程结果返回给Reactor线程。
5. Reactor线程将结果写回socket(Send)。
每个模块的工作请回顾上面的结构介绍。
标签:缓冲区 响应 try 文件 bsp 功能 tcp 模块 master
原文地址:https://www.cnblogs.com/xiaoxlm/p/9414248.html