請問webman中我想在master進(jìn)程中運(yùn)行自定義代碼,比如訪問一個(gè)webapi,根據(jù)返回結(jié)果來定義一些環(huán)境、參數(shù)或者退出服務(wù),在哪里加比較優(yōu)雅呢,謝謝~
為了保證整個(gè)服務(wù)穩(wěn)定,master進(jìn)程不允許有任何業(yè)務(wù)代碼。
設(shè)置bootstrap,每個(gè)進(jìn)程啟動的時(shí)候會執(zhí)行bootstrap的啟動項(xiàng)
可以。
如果你要restart重啟的話,自定義的控制進(jìn)程需要單獨(dú)一個(gè)腳本啟動,因?yàn)樽约簾o法重啟自己。
reload或者其它操作可以一起啟動。
重啟有兩種:
第一種:php start.php restart,主進(jìn)程也重啟那種
這種不支持自己重啟自己。需要沒有親緣進(jìn)程去執(zhí)行才行。
第二種:子進(jìn)程重啟,主進(jìn)程不重啟,也就是reload
reload只需要在業(yè)務(wù)代碼中執(zhí)行 posix_kill( posix_getppid(), SIGUSR1); 即可
不確認(rèn)你具體要做什么 ,具體要的是哪種重啟。
想做一種架構(gòu),一臺主服務(wù)器控制一些子服務(wù)器去做一些操作,比如停止、重啟某一臺子服務(wù)器的服務(wù)這種,子服務(wù)器會過一段時(shí)間查詢主服務(wù)器的命令,然后去執(zhí)行。。貌似不太好弄,自定義進(jìn)程好像不能通知主進(jìn)程去執(zhí)行停止、重啟這種方式?
原來做過交易,拋磚引玉!
【客戶自定義服務(wù)器】可以通過改動進(jìn)程配置文件config/process.php
,比如請求http接口獲取要啟動的業(yè)務(wù)進(jìn)程,合并數(shù)組后return即可。
【遙控器】webman項(xiàng)目的根目錄,單獨(dú)新建一個(gè)腳本文件,啟動一個(gè)worker,異步連接到中央服務(wù)器等待接收重啟指令。
其他自由發(fā)揮,比如接收 進(jìn)程配置,直接改寫 上述的進(jìn)程配置文件,然后給重啟指令即可。
另外,所有在composer.json文件的 autoload.files 加載的文件,都會優(yōu)先載入并運(yùn)行;
意思就是,所有 autoload.files 文件加載運(yùn)行后,才輪到 webman的start.php
感謝大佬回復(fù),不過有兩個(gè)小問題,1是composer.json文件的 autoload.files 加載的文件是可以等待HTTP阻塞調(diào)用并返回?cái)?shù)據(jù)后再去運(yùn)行webman的start.php吧?2是【遙控器】中,啟動的這個(gè)worker好像是子進(jìn)程,子進(jìn)程不能調(diào)用restart去重啟父進(jìn)程。。
注意看題目,遙控器】webman項(xiàng)目的根目錄,單獨(dú)新建一個(gè)腳本文件,啟動一個(gè)worker;這個(gè)是獨(dú)立的兩個(gè)進(jìn)程(master進(jìn)程、worker進(jìn)程),當(dāng)然可以調(diào)用webman的 start.php
回復(fù):1是composer.json文件的 autoload.files 加載的文件是可以等待HTTP阻塞調(diào)用并返回?cái)?shù)據(jù)后再去運(yùn)行webman的start.php吧
答案:是的
不好意思大佬,今天才想起來,剛試了一下遙控器】這個(gè)方案,確實(shí)可行,腳本文件我用 exec(’start.php restart‘) 來啟動為webman,測試成功,但不知如何保持這個(gè)腳本文件后臺執(zhí)行,我想運(yùn)行一個(gè)定時(shí)器每天去主服務(wù)器獲取指令(或建立個(gè)長連接),必須要后臺才行,不吝賜教~
在根目錄,創(chuàng)建一個(gè)【遙控器】腳本,單獨(dú)啟動
use \Workerman\Worker;
use \Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
$task = new Worker();
$task->onWorkerStart = function($task)
{
// 每2.5秒執(zhí)行一次
$time_interval = 2.5;
Timer::add($time_interval, function()
{
//管理進(jìn)程 todo...
});
};
// 運(yùn)行worker
Worker::runAll();
【遙控器】webman項(xiàng)目的根目錄,單獨(dú)新建一個(gè)腳本文件,啟動一個(gè)worker;這個(gè)腳本是單獨(dú)啟動的,與webman 沒有親緣關(guān)系。