由於是多協程,swoole把大媽都載入到了記憶體,所以本地檔案變更之後,執行**仍然是變更前的**,這給開發帶來非常大的麻煩,誰也不想每次改動之後就去手動重啟一下easy_swoole,所以easy_swoole也給出了兩種方案。
方案一:inotify
使用linux的inotify特性,非同步監控檔案修改,發現變更就過載easy_swoole服務,這裡面需要用到php的拓展inotify來呼叫linux系統的inotify命令;
方案二:暴力掃瞄
使用swoole進行暴力掃瞄,指定目錄,發現變更就過載服務;
以下**是整合兩種方案的php**:
<?php
namespace
;use
easyswoole\component\process\abstractprocess
;use
easyswoole\easyswoole\servermanager
;use
easyswoole\utility\file
;use
swoole\process
;use
swoole\table
;use
swoole\timer
;/**
* 暴力熱過載
* class hotreload
*/class
hotreload
extends
abstractprocess
else);
echo
"server hot reload start : use timer tick comparison\n";}
}/**
* 掃瞄檔案變更
*/private
function
runcomparison()
else
else}}
}foreach
($this
->
table
as$inode
=>
$value)}
if($doreload
) use :
s total:
files\n"
; servermanager:
:getinstance()
->
getswooleserver()
->
reload()
;}else
use :
s total:
files\n"
;$this
->
isready
=true;}
}}/** * 註冊inotify監聽事件
*/private
function
registerinotifyevent()
// 加入事件迴圈
swoole_event_add
($inotifyresource
,function()
});}
public
function
onshutdown()
public
function
onreceive
(string $str
)}
把監控服務加入事務中:d:\www\passport_v1.xx.com\easyswooleevent.php
public
static
function
mainservercreate
(eventregister $register))
;# 檔案變更之後熱載入
$swooleserver
= servermanager:
:getinstance()
->
getswooleserver()
;$swooleserver
->
addprocess((
newhotreload
('hotreload',[
'disableinotify'
=>
true])
)->
getprocess()
);}
SpringBoot熱重啟配置詳解
1.新增依賴 org.springframework.boot sprinwww.cppcns.comg boot devtools true 不能被其它模組繼承,如果多個子模組可以去掉 不必須 runtime 只在執行時起作用 打包時不打進去 安裝成功後檢視m en 依賴 如果存在spring b...
exec go 重啟 如何用 Go 實現熱重啟
熱重啟 熱重啟 zero downtime 指新老程序無縫切換,在替換過程中可保持對 client 的服務。原理父程序監聽重啟訊號 在收到重啟訊號後,父程序呼叫 fork 同時傳遞 socket 描述符給子程序 子程序接收並監聽父程序傳遞的 socket 描述符 在子程序啟動成功之後,父程序停止接收...
Go 實現熱重啟的詳細介紹
最近在優化公司框架 trpc 時發現了乙個熱重啟相關的問題,優化之餘也總結沉澱下,對 go 如何實現熱重啟這方面的內容做乙個簡單的梳理。1.什麼是熱重啟?這是我理解的熱重啟的乙個大致描述。熱重啟現在還有沒有存在的必要?我的理解是看場景。以後臺開發為例,假如運維平台有能力在服務公升級 重啟時自動踢掉流...