小編給大家分享一下重啟swoole的方法,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
濱湖網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),濱湖網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為濱湖上千余家提供企業(yè)網(wǎng)站建設(shè)服務。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務好的濱湖做網(wǎng)站的公司定做!
官方說是可以平滑重啟所有的worker和tasker進程,可以通過
$swoole->reload(),或者\swoole_process::kill($master_pid, SIGUSR1),或者直接kill -USR1 master_pid等等。
簡單測試
開啟一個swoole_http_server,worker進程和tasker進程都為1個,然后瀏覽器發(fā)起一個http請求,請求的內(nèi)容只是簡單的sleep一下,通過sleep函數(shù),應該是可以說明處理此請求的worker,是正在處于工作狀態(tài)的吧,然后在sleep期間,進行reload操作。
當?shù)谝淮伟l(fā)起一個請求到swoole server,manager進程會將請求調(diào)度到worker去進行處理,然后在worker處理的sleep期間,如果再有請求進來,manager是不會將后續(xù)的請求調(diào)度給唯一的worker進程,因為worker進程還在忙碌處理第一個請求。這個可以通過簡單測試確認。
http請求就是路由到下面的簡單方法。因為用的是easyswoole框架,執(zhí)行php easyswoole reload all命令,其實也就是kill -USR1 master_pid。
Server的配置
$swoole_server->set([ 'worker_num' => 1, 'task_worker_num' => 1, 'reload_async' => true, 'max
開始測試
1、任務邏輯寫在worker進程里面
http方法
public function test() { $start = microtime(true); echo '請求開始時間:' . $start . PHP_EOL; echo 'pid: ' . getmypid() . PHP_EOL; sleep(30); # 這里睡眠腳本作測試 echo 'finish sleep' . PHP_EOL; $end = microtime(true); echo '請求結(jié)束時間:' . $end . PHP_EOL; $this->writeJson(0, round(($end - $start), 3)); }
監(jiān)控onWorkerStart()方法
EventHelper::registerWithAdd(ServerManager::getInstance()->getMainEventRegister(),EventRegister::onWorkerStart,function (\swoole_server $server,$workerId){ if(PHP_OS != 'Darwin'){ $name = Config::getInstance()->getConf('SERVER_NAME'); if( ($workerId < Config::getInstance()->getConf('MAIN_SERVER.SETTING.worker_num')) && $workerId >= 0){ $type = 'Worker'; }else{ $type = 'TaskWorker'; } cli_set_process_title("{$name}.{$type}.{$workerId}"); } # 下面是打印測試的 if ($type == 'Worker') { echo "這個是reload worker的時間:" . microtime(true) . "\n"; } if ($type == 'TaskWorker') { echo "這個是reload TaskWorker的時間:" . microtime(true) . "\n"; } });
測試結(jié)果:
請求開始時間:1566880257.9533 # 這里請求http接口,就是test()
pid: 42108
這個是reload TaskWorker的時間:1566880265.1501 # 這里是執(zhí)行 php easyswoole reload all 的時間,因為tasker空閑沒任務,就馬上就行reload了。
這個是reload worker的時間:1566880275.1524 # 這個是worker的reload時間,因為在test()里面sleep(30),而且超過了max_wait_time,底層不會繼續(xù)等待worker的任務完成,直接把舊的worker結(jié)束掉,結(jié)果也沒有打印'finish sleep',創(chuàng)建了新的worker。
# 但是為什么是10s才重新創(chuàng)建worker呢?max_wait_time設(shè)置為5s????這個是我一直想不明白的。
看完了這篇文章,相信你對“重啟swoole的方法”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
文章題目:重啟swoole的方法
文章網(wǎng)址:http://muchs.cn/article0/ihdhio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、全網(wǎng)營銷推廣、響應式網(wǎng)站、標簽優(yōu)化、網(wǎng)站制作、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)