首頁 >php框架 >Swoole >swoole如何重啟

swoole如何重啟

(*-*)浩
(*-*)浩原創
2019-12-07 14:24:135552瀏覽

swoole如何重啟

在swoole中,我們可以向主程序發送各種不同的訊號,主程序根據接收到的訊號類型做出不同的處理。

例如下面這幾個               (建議學習: swoole視訊教學

1、kill -SIGTERM|-15 master_pid  终止Swoole程序,一种优雅的终止信号,会待进程执行完当前程序之后中断,而不是直接干掉进程
2、kill -USR1|-10  master_pid  重启所有的Worker进程
3、kill -USR2|-12  master_pid  重启所有的Task Worker进程

當USR1訊號傳送給Master進程後,Master進程同樣會同樣地的訊號透過Manager進程轉送Worker進程,收到此訊號的Worker進程會在處理完正在執行的邏輯之後,釋放進程內存,關閉自己,然後由Manager進程重啟一個新的Worker進程。

新的Worker進程會佔用新的記憶體空間。

場景:

如果是上線的項目,一台繁忙的後端伺服器隨時都在處理請求,如果管理員透過kill進程方式來終止/重啟伺服器程序,可能導致剛好程式碼執行到一半終止。

這種情況下會產生資料的不一致。

如交易系統中,支付邏輯的下一段是發貨,假設在支付邏輯之後進程被終止了。會導致用戶支付了貨幣,但並沒有發貨,後果非常嚴重。

swoole為我們提供了平滑重啟機制,我們只需要向swoole_server的主程序發送特定的訊號,即可完成對server的重新啟動。

注意事項:

1、更新僅只是針對worker進程,在worker 進程當中include  也就是寫在master進程跟manger進程當中更新程式碼並不生效,也就是說只有在onWorkerStart回呼之後載入的文件,重啟才有意義。

在Worker進程啟動之前就已經載入到記憶體中的文件,如果想讓它重新生效,只能關閉server再重新啟動。

2、直接寫在worker程式碼當中的邏輯是不會生效的,就算發送了訊號也不會,需要透過include方式引入相關的業務邏輯程式碼才會生效

以上是swoole如何重啟的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn