easy swoole熱重啟檔案變更自動過載

2021-10-07 00:14:24 字數 2188 閱讀 6731

由於是多協程,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.什麼是熱重啟?這是我理解的熱重啟的乙個大致描述。熱重啟現在還有沒有存在的必要?我的理解是看場景。以後臺開發為例,假如運維平台有能力在服務公升級 重啟時自動踢掉流...