swoole事件处理流程
内容导读
收集整理的这篇技术教程文章主要介绍了swoole事件处理流程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1979字,纯文字阅读大概需要3分钟。
内容图文
本篇文章的主要内容是关于对swoole事件处理流程的解析,感兴趣的朋友可以了解一下,希望本文能对你有所帮助。了解swoole事件处理流程,先了解两种网络事件处理模式。
Reactor模式
它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程/进程(逻辑单元)。除此之外,主线程不做任何其他工作。读写数据,接受新的连接,以及处理客户请求均在工作线程中完成。
Proactor模式
两种实现
使用I/O异步模型实现Proactor模式。原理:将所有I/O操作都交给主线程,主线程配合和内核来处理,业务逻辑操作就交给逻辑单元。例如使用aio_read来实现。
工作流程:
- 主线程调用aio_read函数向内核注册socket上的读完成事件。
- 主线程继续处理其他I/O事件。
- 当socket上的数据被读入用户缓冲区后,内核向应用程序(逻辑单元)发送一个信号,通知应用程序数据可用。
- 应用程序读取数据(客户端的请求),处理完后,调用aio_write函数向内核注册socket上的写事件。
- 主线程继续处理其他逻辑。
- 当用户缓冲区的数据写入socket后,内核向应用程序发送一个信号,通知应用程序数据发送完毕。
- 应用程序预先定义好的信号处理函数来处理善后处理,比如关闭socket.
使用I/O同步模型实现Proactor模式。原理:主线程执行I/O事件数据的读写操作,业务逻辑操作就交给逻辑单元。例如使用epoll来实现。
工作流程:
- 主线程往epoll内核事件表中注册socket上的读就绪事件。
- 主线程调用epoll_wait等待socket上有数据可读。
- epoll_wait有返回后,主线程从socket上读取数据,然后将读取到的数据封装成一个请求对象(客户端的请求),并插入请求队列。
- 于是队列的消费者线程处理请求对象,然后在epoll内核事件表中注册socket上的写就绪事件。
- 主线程调用epoll_wait等待socket可写。
- 当socket可写时,epoll_wait通知主线程。主线程往socket写入请求结果。
swoole事件架构图
从图可以看出,如果我们把Reactor线程和Work进程组合起来,看成工作线程的话,swoole使用的是reactor事件处理模式。
一个请求经历的步骤如下:
1. 服务器主线程等待客户端连接。
2. Reactor线程处理接连socket,读取socket上的请求数据(Receive),将请求封装好后投递给work进程。
3. Work进程就是逻辑单元,处理业务数据。
4. Work进程结果返回给Reactor线程。
5. Reactor线程将结果写回socket(Send)。
相关教程:swoole视频教程
以上就是swoole事件处理流程的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是为您收集整理的swoole事件处理流程全部内容,希望文章能够帮你解决swoole事件处理流程所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 lecms, classcms, fastadmin, pbootcms, phpcms, eyoucms, yzmcms, PHP, xunruicms, jizhicms, dedecms, wordpress, hkcms, yzncms, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。