swoole進程關閉后可以使用Server->reload方法重啟。
Server->reload方法介紹:
重啟所有worker/task進程。
bool?Server->reload(bool?$only_reload_taskworkrer?=?false)
$only_reload_taskworkrer?是否僅重啟Task進程
一臺繁忙的后端服務器隨時都在處理請求,如果管理員通過kill進程方式來終止/重啟服務器程序,可能導致剛好代碼執行到一半終止。
這種情況下會產生數據的不一致。如交易系統中,支付邏輯的下一段是發貨,假設在支付邏輯之后進程被終止了。會導致用戶支付了貨幣,但并沒有發貨,后果非常嚴重。
swoole提供了柔性終止/重啟的機制,管理員只需要向Server發送特定的信號,Server的Worker進程可以安全的結束。
1、SIGTERM: 向主進程/管理進程發送此信號服務器將安全終止
2、在php代碼中可以調用$serv->shutdown()完成此操作
3、SIGUSR1: 向主進程/管理進程發送SIGUSR1信號,將平穩地restart所有Worker進程
4、在PHP代碼中可以調用$serv->reload()完成此操作
5、reload有保護機制,當一次reload正在進行時,收到新的重啟信號會丟棄
6、如果設置了user/group,Worker進程可能沒有權限向master進程發送信息,這種情況下必須使用root賬戶,在shell中執行kill指令進行重啟
7、reload指令對addProcess添加的用戶進程無效
推薦學習:swoole視頻教程
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦