国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

建議 Workerman 增加自定義命令的支持

pader

現(xiàn)在只要敲下 php start.php custom 后面不是 Workerman 指定的幾個(gè)命令,就會(huì)出現(xiàn):

php start.php custom
Usage: php yourfile <command> [mode]
Commands:
start           Start worker in DEBUG mode.
                Use mode -d to start in DAEMON mode.
stop            Stop worker.
                Use mode -g to stop gracefully.
restart         Restart workers.
                Use mode -d to start in DAEMON mode.
                Use mode -g to stop gracefully.
reload          Reload codes.
                Use mode -g to reload gracefully.
status          Get worker status.
                Use mode -d to show live status.
connections     Get worker connections.

希望 Workerman 新增一些自定義命令的方式,比如:

Worker::addCommand('custom', function() {
    new MyOtherServer();
    Worker::runAll();
}, 'Custom command information.');
4273 2 0
2個(gè)回答

walkor 打賞

workerman命令機(jī)制并不是想象的那么簡(jiǎn)單。它涉及到啟動(dòng)腳本進(jìn)程、主進(jìn)程、子進(jìn)程之前的相互通訊。
比如status命令,就是啟動(dòng)腳進(jìn)程判斷是status命令,然后給主進(jìn)程發(fā)送某個(gè)信號(hào),主進(jìn)程收到信號(hào)后把主進(jìn)程掌握的信息寫入磁盤,然后把信號(hào)發(fā)給所有子進(jìn)程,子進(jìn)程將自己的狀態(tài)寫入到磁盤,然后腳本進(jìn)程讀取磁盤數(shù)據(jù)輸出結(jié)果。

絕大部分php開發(fā)人員沒有多進(jìn)程編程經(jīng)驗(yàn),或者對(duì)workerman進(jìn)程模型不了解,無(wú)法考慮周全。比如new MyOtherServer();,它應(yīng)該運(yùn)行在腳本進(jìn)程、主進(jìn)程、還是子進(jìn)程一般開發(fā)者都不清楚。從而導(dǎo)致workeman不可預(yù)期的行為。

  • pader 2020-12-16

    這個(gè) MyOtherServer() 就是一個(gè) Worker,這里的意思就是通過不同的參數(shù)啟動(dòng)不同的 Worker,或者能夠自己獲取自定義傳參,從而判斷實(shí)例化哪個(gè) Worker 來實(shí)現(xiàn)不同的命令。
    或者支持 start 之后的參數(shù),比如 php start.php start mycustom cli param,然后在程序里可以通過 Worker::getCustomParam() 之類的來獲取參數(shù)來做一些特殊的操作。

  • walkor 2020-12-16

    這個(gè)簡(jiǎn)單,通過 $argv 來獲得參數(shù)。例如下面通過參數(shù)傳遞要監(jiān)聽的端口,命令為 “php start.php start 端口號(hào)”。實(shí)現(xiàn)代碼是
    $worker = new Worker(']);

pader

我現(xiàn)在碰到一個(gè)問題,就是我需要通過啟動(dòng) Workerman 處理一些事情,這些事情可能要處理幾秒鐘,也可能幾分鐘,希望處理完成后就退出相關(guān)的進(jìn)程,任務(wù)結(jié)束了。

然而 Workerman 似乎并不支持相關(guān)的操作,比如在 onWorkerStart 中有一個(gè) Timer::add() 在定時(shí)器內(nèi)部是 Worker::stopAll(),然而這個(gè) stopAll 并不是終止 Workerman,而是重啟所有子進(jìn)程。

現(xiàn)在有什么辦法可以啟動(dòng)臨時(shí)性的進(jìn)程來執(zhí)行任務(wù)?

  • walkor 2021-07-06

    調(diào)用 posix_kill(posix_getppid(), SIGINT); 來停止workerman。

年代過于久遠(yuǎn),無(wú)法發(fā)表回答
??