swoole的原理和实际开发注意问题

本文详细介绍了swoole的工作原理,包括Master和Manager进程的角色,以及在实际开发中如何利用Worker和Task进程。swoole与php-fpm的区别在于其常驻内存和协程特性,适合于高并发的IO密集型场景。在开发中要注意全局变量的管理、内存泄漏和正确响应HTTP请求等问题。
摘要由CSDN通过智能技术生成

一、swoole介绍

Swoole 是一个使用 C++ 语言编写的基于异步事件驱动和协程的并行网络通信引擎,为 PHP 提供协程、高性能网络编程支持。提供了多种通信协议的网络服务器和客户端模块,可以方便快速的实现 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等,使 PHP 不再局限于传统的 Web 领域。

Swoole严格来说是php的扩展,不是框架

.
.
.

二、swoole的主要角色

在这里插入图片描述

1、Master进程

swoole 的主要进程,处理核心的事件,比如客户端的连接,本地通讯的管道。(由于 Work 进程不是 Master 进程 fork出来的,所以可能会出现强行 kill 掉Master进程后,出现 Worker 进程依然在运行的情况)

(1)reactor线程

是在Master进程中比较重要的一种线程,专门负责接收TCP请求和解析(还有负责发送TCP请求),然后把数据包发给 Worker 进程处理(做了类型nignx的工作,传递请求)

(2)UDP接收包线程

接收UDP协议请求

.

2、Manager进程

负责 fork 、维护和管理 Worker / Task进程

(1)Worker进程

以多进程方式运行,每个子进程负责接收由reactot线程投递的数据包,并执行php回调函数处理,然后生成响应数据并且发送给reactor线程,由reactor线程以TCP协议发送给客户端

说的直白点,就是负责执行php业务代码逻辑的,实际开发中,设置Work进程的work_num最多只能设置到CPU核数的1~4倍(work_num = cpu核数 * 核数的1~4倍)

(2)Task进程

功能与Worker进程类似,也是以多进程的方式运行,但仅用于任务分发。当Worker进程将任务异步分发到任务队列时,Task进程负责从队列中消费这些任务(同步阻塞的方式),处理完成后将结果返回给Work进程

在实际开发,会使用 OnTask() 函数分发任务

.

3、对于在实际开发中的思考

我们日常开发中主要关注的是 Worker 进程的回调函数,只需要在服务器实例上监听相应的事件,并编写对应的回调函数来处理相应的业务逻辑即可,也可以在回调函数用onTask函数向Task进程投递异步任务。

有一个很好的比喻,Swoole应用服务器是一个工厂,那Reactor就是销售,接受客户(客户端)订单。而Worker就是工人,当销售接到订单后,Worker去工作生产出客户要的东西。而Task可以理解为行政人员,可以帮助Worker干些杂事,让Worker专心工作

在这里插入图片描述

4、课外拓展

什么是协程?
要想理解协程,需要先理解什么是进程和线程,因为协程是在线程下运行的,协程可以说是轻量级线程。协程的创建、切换、挂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值