使当前Worker
进程停止运行,并立即触发onWorkerStop
回调函数。
function Server->stop(int $worker_id = -1, bool $waitEvent = false);
- 使用此函数代替
exit/die
结束Worker进程的生命周期
- 如果要结束其他Worker进程,可以在
stop
里面加上worker_id
作为参数或者使用swoole_process::kill($worker_pid)
此方法在
1.8.2
或更高版本可用
$waitEvent
在1.9.19
或更高版本可用
异步服务器在调用stop
退出进程时,可能仍然有事件在等待。比如使用了Swoole\MySQL->query
,发送了SQL
语句,但还在等待MySQL
服务器返回结果。这时如果进程强制退出,SQL
的执行结果就会丢失了。
设置$waitEvent = true
后,底层会使用异步安全重启策略。先通知Manager
进程,重新启动一个新的Worker
来处理新的请求。当前旧的Worker
会等待事件,直到事件循环为空或者超过max_wait_time
后,退出进程,最大限度的保证异步事件的安全性。