真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

重啟swoole的方法

小編給大家分享一下重啟swoole的方法,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

濱湖網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),濱湖網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為濱湖上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的濱湖做網(wǎng)站的公司定做!

官方說是可以平滑重啟所有的worker和tasker進(jìn)程,可以通過

$swoole->reload(),或者\(yùn)swoole_process::kill($master_pid, SIGUSR1),或者直接kill -USR1 master_pid等等。

簡單測試

開啟一個(gè)swoole_http_server,worker進(jìn)程和tasker進(jìn)程都為1個(gè),然后瀏覽器發(fā)起一個(gè)http請(qǐng)求,請(qǐng)求的內(nèi)容只是簡單的sleep一下,通過sleep函數(shù),應(yīng)該是可以說明處理此請(qǐng)求的worker,是正在處于工作狀態(tài)的吧,然后在sleep期間,進(jìn)行reload操作。

當(dāng)?shù)谝淮伟l(fā)起一個(gè)請(qǐng)求到swoole server,manager進(jìn)程會(huì)將請(qǐng)求調(diào)度到worker去進(jìn)行處理,然后在worker處理的sleep期間,如果再有請(qǐng)求進(jìn)來,manager是不會(huì)將后續(xù)的請(qǐng)求調(diào)度給唯一的worker進(jìn)程,因?yàn)閣orker進(jìn)程還在忙碌處理第一個(gè)請(qǐng)求。這個(gè)可以通過簡單測試確認(rèn)。

http請(qǐng)求就是路由到下面的簡單方法。因?yàn)橛玫氖莈asyswoole框架,執(zhí)行php easyswoole reload all命令,其實(shí)也就是kill -USR1 master_pid。

Server的配置

$swoole_server->set([
    'worker_num' => 1,
    'task_worker_num' => 1,
    'reload_async' => true,
    'max

開始測試

1、任務(wù)邏輯寫在worker進(jìn)程里面

http方法

 public function test()
    {
        $start = microtime(true);
        echo '請(qǐng)求開始時(shí)間:' . $start . PHP_EOL;
        echo 'pid: ' . getmypid() . PHP_EOL;
        sleep(30);    # 這里睡眠腳本作測試
        echo 'finish sleep' . PHP_EOL;
        $end = microtime(true);
        echo '請(qǐng)求結(jié)束時(shí)間:' . $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 "這個(gè)是reload worker的時(shí)間:" . microtime(true) . "\n";
          }
          if ($type == 'TaskWorker') {
              echo "這個(gè)是reload TaskWorker的時(shí)間:" . microtime(true) . "\n";
          }
   });

測試結(jié)果:

請(qǐng)求開始時(shí)間:1566880257.9533    # 這里請(qǐng)求http接口,就是test()

pid: 42108

這個(gè)是reload TaskWorker的時(shí)間:1566880265.1501    # 這里是執(zhí)行 php easyswoole reload all 的時(shí)間,因?yàn)閠asker空閑沒任務(wù),就馬上就行reload了。

這個(gè)是reload worker的時(shí)間:1566880275.1524    # 這個(gè)是worker的reload時(shí)間,因?yàn)樵趖est()里面sleep(30),而且超過了max_wait_time,底層不會(huì)繼續(xù)等待worker的任務(wù)完成,直接把舊的worker結(jié)束掉,結(jié)果也沒有打印'finish sleep',創(chuàng)建了新的worker。

# 但是為什么是10s才重新創(chuàng)建worker呢?max_wait_time設(shè)置為5s?。??這個(gè)是我一直想不明白的。

看完了這篇文章,相信你對(duì)“重啟swoole的方法”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


當(dāng)前文章:重啟swoole的方法
瀏覽地址:http://weahome.cn/article/ihdhio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部