异步回调
⛔️重要提示
异步回调模块已过时,目前仅修复 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
设置错误日志等级