0

0

swoole事件处理流程

little bottle

little bottle

发布时间:2019-04-26 15:50:22

|

2785人浏览过

|

来源于博客园

转载

本篇文章的主要内容是关于对swoole事件处理流程的解析,感兴趣的朋友可以了解一下,希望本文能对你有所帮助。

了解swoole事件处理流程,先了解两种网络事件处理模式。

Reactor模式

它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程/进程(逻辑单元)。除此之外,主线程不做任何其他工作。读写数据,接受新的连接,以及处理客户请求均在工作线程中完成。

Proactor模式

两种实现

使用I/O异步模型实现Proactor模式。原理:将所有I/O操作都交给主线程,主线程配合和内核来处理,业务逻辑操作就交给逻辑单元。例如使用aio_read来实现。

工作流程:

  1. 主线程调用aio_read函数向内核注册socket上的读完成事件。
  2. 主线程继续处理其他I/O事件。
  3. 当socket上的数据被读入用户缓冲区后,内核向应用程序(逻辑单元)发送一个信号,通知应用程序数据可用。
  4. 应用程序读取数据(客户端的请求),处理完后,调用aio_write函数向内核注册socket上的写事件。
  5. 主线程继续处理其他逻辑。
  6. 当用户缓冲区的数据写入socket后,内核向应用程序发送一个信号,通知应用程序数据发送完毕。
  7. 应用程序预先定义好的信号处理函数来处理善后处理,比如关闭socket.

使用I/O同步模型实现Proactor模式。原理:主线程执行I/O事件数据的读写操作,业务逻辑操作就交给逻辑单元。例如使用epoll来实现。

工作流程:

  1. 主线程往epoll内核事件表中注册socket上的读就绪事件。
  2. 主线程调用epoll_wait等待socket上有数据可读。
  3. epoll_wait有返回后,主线程从socket上读取数据,然后将读取到的数据封装成一个请求对象(客户端的请求),并插入请求队列。
  4. 于是队列的消费者线程处理请求对象,然后在epoll内核事件表中注册socket上的写就绪事件。
  5. 主线程调用epoll_wait等待socket可写。
  6. 当socket可写时,epoll_wait通知主线程。主线程往socket写入请求结果。

swoole事件架构图

从图可以看出,如果我们把Reactor线程和Work进程组合起来,看成工作线程的话,swoole使用的是reactor事件处理模式。

一个请求经历的步骤如下:

bootstrap modal对话框功能
bootstrap modal对话框功能

扩展自原生的Bootstrap对话框并提供一些额外的功能。 它引入一个ModalManager类,能够在屏幕后处理多个模态对话框,通过监听他们的事件实现。

下载

1. 服务器主线程等待客户端连接。

2. Reactor线程处理接连socket,读取socket上的请求数据(Receive),将请求封装好后投递给work进程。

3. Work进程就是逻辑单元,处理业务数据。

4. Work进程结果返回给Reactor线程。

5. Reactor线程将结果写回socket(Send)。

 相关教程:swoole视频教程

相关专题

更多
swoole为什么能常驻内存
swoole为什么能常驻内存

swoole常驻内存的特性:1. 事件驱动模型减少内存消耗;2. 协程并行执行任务占用更少内存;3. 协程池预分配协程消除创建开销;4. 静态变量保留状态减少内存分配;5. 共享内存跨协程共享数据降低内存开销。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

292

2024.04.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

9

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

25

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

18

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

19

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

10

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
swoole进程树解析
swoole进程树解析

共4课时 | 0.2万人学习

Swoole系列-从0到1-新手进阶
Swoole系列-从0到1-新手进阶

共29课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号