重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
這篇文章將為大家詳細(xì)講解有關(guān)swoole怎樣重啟,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)是專業(yè)的鲅魚圈網(wǎng)站建設(shè)公司,鲅魚圈接單;提供做網(wǎng)站、網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鲅魚圈網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
在swoole中,我們可以向主進(jìn)程發(fā)送各種不同的信號(hào),主進(jìn)程根據(jù)接收到的信號(hào)類型做出不同的處理。
比如下面這幾個(gè)
1、kill -SIGTERM|-15 master_pid 終止Swoole程序,一種優(yōu)雅的終止信號(hào),會(huì)待進(jìn)程執(zhí)行完當(dāng)前程序之后中斷,而不是直接干掉進(jìn)程 2、kill -USR1|-10 master_pid 重啟所有的Worker進(jìn)程 3、kill -USR2|-12 master_pid 重啟所有的Task Worker進(jìn)程
當(dāng)USR1信號(hào)被發(fā)送給Master進(jìn)程后,Master進(jìn)程會(huì)將同樣的信號(hào)通過Manager進(jìn)程轉(zhuǎn)發(fā)Worker進(jìn)程,收到此信號(hào)的Worker進(jìn)程會(huì)在處理完正在執(zhí)行的邏輯之后,釋放進(jìn)程內(nèi)存,關(guān)閉自己,然后由Manager進(jìn)程重啟一個(gè)新的Worker進(jìn)程。
新的Worker進(jìn)程會(huì)占用新的內(nèi)存空間。
場(chǎng)景:
如果是上線的項(xiàng)目,一臺(tái)繁忙的后端服務(wù)器隨時(shí)都在處理請(qǐng)求,如果管理員通過kill進(jìn)程方式來終止/重啟服務(wù)器程序,可能導(dǎo)致剛好代碼執(zhí)行到一半終止。
這種情況下會(huì)產(chǎn)生數(shù)據(jù)的不一致。
如交易系統(tǒng)中,支付邏輯的下一段是發(fā)貨,假設(shè)在支付邏輯之后進(jìn)程被終止了。會(huì)導(dǎo)致用戶支付了貨幣,但并沒有發(fā)貨,后果非常嚴(yán)重。
swoole為我們提供了平滑重啟機(jī)制,我們只需要向swoole_server的主進(jìn)程發(fā)送特定的信號(hào),即可完成對(duì)server的重啟。
注意事項(xiàng):
1、更新僅僅只是針對(duì)worker進(jìn)程,在worker 進(jìn)程當(dāng)中include 也就是寫在master進(jìn)程跟manger進(jìn)程當(dāng)中更新代碼并不生效,也就是說只有在onWorkerStart回調(diào)之后加載的文件,重啟才有意義。
在Worker進(jìn)程啟動(dòng)之前就已經(jīng)加載到內(nèi)存中的文件,如果想讓它重新生效,只能關(guān)閉server再重啟。
2、直接寫在worker代碼當(dāng)中的邏輯是不會(huì)生效的,就算發(fā)送了信號(hào)也不會(huì),需要通過include方式引入相關(guān)的業(yè)務(wù)邏輯代碼才會(huì)生效
關(guān)于swoole怎樣重啟就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。