本篇文章为大家展示了Swoole扩展的模式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
第一 Worker同步阻塞
这个模式的使用方法:
这个模式的瓶颈就在与onRequest或onReceive里代码逻辑的处理速度。按照快慢可以分为几种
外网CURL调用。这个最慢,快的数百毫秒,慢的情况可能需要几十秒
内网RPC或Http接口,这个取决与这个接口的速度
MySQL复杂查询,一条SQL如果没有索引可能需要几百毫秒,甚至几秒或更长时间。而如果是主键查询或者索引足够有效可能只需要几毫秒
Redis/Memcache,内存数据库局域网而且是长连接,调用一次可能只需要几百微秒也就是0.x毫秒就能返回
读取磁盘文件,普通机械磁盘未命中PageCache引起磁盘寻道,可能需要几十毫秒。SSD磁盘速度就快多了几毫秒即可完成随机读取。
内存文件系统或共享内存,读取/tmp或/dev/shm下的共享文件本质上是读取共享内存,仅需几微妙到几十微秒即可完成。如果是直接读共享内存可能更快,纳秒级别。
进程数量
根据上面的IO耗时,设置适当的进程数量即可。
投递模式
如果请求是无状态的可以使用dispatch_mode=1或3,轮循投递或者区分忙闲投递。
长连接应用
比如聊天室,网络游戏。连接之间需要交互的应用。 可以使用 MySQL/Redis/文件 存储用户的连接fd,分组信息。要向某个用户发数据可以根据UID查出对应的fd,发送数据即可。发送分组,可以根据分阻ID查询出fd列表,循环发送数据即可。
第二 Worker非阻塞+Task
这种模式是典型的同步+异步,复杂的业务逻辑使用同步阻塞在Task进程中处理,简单要求高并发的逻辑使用异步非阻塞在Worker进程中处理。
使用方法
Worker进程
在这个模式中,Worker进程不能有任何同步阻塞的操作,只处理请求响应或数据接收发送,仅进行PHP数组或对象操作或其他计算逻辑。具体参考 模式3 Worker进程全异步。
Task进程
无状态地处理任务,并返回结果。需要注意单个Task的执行时间,避免处理时间太长导致Task排队过多。
第三 Worker全异步
这个模式就是真正的异步非阻塞编程,在代码中只能使用Swoole提供的异步非阻塞IO操作,不得执行任何普通的PHP阻塞IO函数,如curl、mysql、redis、fsockopen、stream、socket、proc_open等。
与模式二 不同的是全异步服务器不使用Task进程,即使是很复杂的业务逻辑也在Worker进程中执行。纯异步编程需要对开发者要求较高。
使用方法
dispatch_mode设置为2
worker_num 设置为CPU核数
逻辑实现
Worker进程内的PHP代码只能进行下列3种操作:
适用场景
长连接服务
对并发能力和吞吐量有较高要求
团队开发者技术水平较高
弊端和解决方案
可使用 Promise 或 Yield/Generator 简化异步编程。
第四 Base模式+同步阻塞
Base模式是一个简化版本,Base模式下Swoole的运行原理与Node.js完全一致,是单线程的。对TCP客户端的Accept、Send、Recv、Close都是同一个进程内操作的。
与Process同步阻塞模式不同的是BASE模式下Worker进程的调度由操作系统实现。因此可以实现一个Leader-Follower模式的服务器程序。
使用方法
适用场景
第五 Process
Process提供了对进程管理的封装。基于Process可实现:
多进程+进程间通信编程
将其他语言编写的程序包装为子进程,重定向标准输入输出到管道,与该程序进行通信。可实现任意编程语言为我PHP所用。
上述内容就是Swoole扩展的模式有哪些,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注天达云行业资讯频道。