多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 异步回调 [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`设置错误日志等级