+
95
-

swoole扩展的6种模式有什么不同?

swoole扩展的6种模式有什么不同?

网友回复

+
15
-

一、 Worker同步阻塞模式

这个模式的使用方法:

swoole_server设置为SWOOLE_PROCESS

只使用Worker进程

根据不同的情况设置worker_num的数值

设置dispatch_mode参数为1或3

Worker进程内使用同步阻塞的代码编写方式,这里不使用任何异步IO接口

这个模式的瓶颈就在与onRequest或onReceive里代码逻辑的处理速度。按照快慢可以分为几种

外网CURL调用。这个最慢,快的数百毫秒,慢的情况可能需要几十秒

内网RPC或Http接口,这个取决与这个接口的速度

MySQL复杂查询,一条SQL如果没有索引可能需要几百毫秒,甚至几秒或更长时间。而如果是主键查询或者索引足够有效可能只需要几毫秒

Redis/Memcache,内存数据库局域网而且是长连接,调用一次可能只需要几百微秒也就是0.x毫秒就能返回

读取磁盘文件,普通机械磁盘未命中PageCache引起磁盘寻道,可能需要几十毫秒。SSD磁盘速度就快多了几毫秒即可完成随机读取。

内存文件系统或共享内存,读取/tmp或/dev/shm下的共享文件本质上是读取共享内存,仅需几微妙到几十微秒即可完成。如果是直接读共享内存可能更快,纳秒级别。

进程数量

根据上面的IO耗时,设置适当的进程数量即可。

IO很慢就设置几百个Worker进程,如操作MySQL、CURL、大量读写磁盘

IO很快就可设置少量进程,如操作Redis、内存文件系统、共享内存

投递模式

如果请求是无状态的可以使用dispatch_mode=1或3,轮循投递或者区分忙闲投递。

长连接应用

比如聊天室,网络游戏。连接之间需要交互的应用。 可以使用 MySQL/Redis/文件 存储用户的连接fd,分组信息。要向某个用户发数据可以根据UID查出对应的fd,发送数据即可。发送分组,可以根据分阻ID查询出fd列表,循环发送数据即可。

二、Worker非阻塞+Task模式

这种模式是典型的同步+异步,复杂的业务逻辑使用...

点击查看剩余70%

我知道答案,我要回答