异步回调
最后更新于:2022-04-02 06:38:21
# 异步回调
[TOC]
## ⛔️重要提示
**异步回调模块已过时,目前仅修复 BUG,不再进行维护, 且在V4.3.0中移除了异步模块。请使用 Coroutine 协程模块。**
## 异步 IO
`Swoole`扩展内置了异步文件读写,异步`DNS`,异步`Http/WebSocket/MySQL/Redis`客户端,异步定时器,异步信号等特性。编写纯异步非阻塞`IO`的程序时,不能使用`PHP`自带的同步阻塞网络客户端,如`curl`、`file_get_contents`、`stream`、`sockets`、`mysql`、`redis`。
* `Swoole\Server`的`Task进程`是同步阻塞的,没有`EventLoop`,因此无法使用除定时器之外的任何异步`API`
* `signalfd`是`Linux-2.6.27`提供文件句柄方式处理信号特性,优点是可以将信号加入到`EventLoop`中,`Reactor`操作不会被信号打断提高了性能。缺点是有些同步阻塞的程序可能会出现问题,无法从阻塞中中断,可以使用`swoole_async_set`关闭`signalfd`特性
## swoole\_async\_set
此函数可以设置异步`IO`相关的选项。
~~~
swoole_async_set(array $setting);
~~~
* `thread_num`设置异步文件IO线程的数量
* `enable_signalfd`开启和关闭`signalfd`特性的使用
* `enable_reuse_port`开启端口复用,需要`Linux-3.10`或更高版本内核,开启后`BASE`模式下每个工作进程都会监听端口,可避免惊群问题
* `socket_buffer_size`设置`SOCKET`内存缓存区尺寸
* `socket_dontwait`在内存缓存区已满的情况下禁止底层阻塞等待
* `log_file`设置日志文件路径
* `log_level`设置错误日志等级
';