搜尋
首頁php框架Swooleswoole怎麼重啟

swoole怎麼重啟

Dec 10, 2019 pm 03:20 PM
swoole

swoole怎麼重啟

官方說是可以平滑重啟所有的worker和tasker進程,可以透過

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

推薦學習: swoole影片教學

#簡單測試

開啟一個swoole_http_server,worker進程和tasker進程都為1個,然後瀏覽器發起一個http請求,請求的內容只是簡單的sleep一下,透過sleep函數,應該是可以說明處理此請求的worker,是正在處於工作狀態的吧,然後在sleep期間,進行reload操作。

當第一次發起一個請求到swoole server,manager進程會將請求調度到worker去進行處理,然後在worker處理的sleep期間,如果再有請求進來,manager是不會將後續的請求調度給唯一的worker進程,因為worker進程還在忙碌地處理第一個請求。這個可以用簡單測試確認。

http請求就是路由到下面的簡單方法。因為用的是easyswoole框架,執行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 '请求结束时间:' . $end . PHP_EOL;
        $this->writeJson(0, round(($end - $start), 3));
    }

監控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 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";
          }
   });

測試結果:

請求開始時間:1566880257.9533    # 這裡請求http接口,就是test()

pid: 42108

#這個

#這個是reload TaskWorker的時間:1566880265.1501    # 這裡是執行php easyswoole reload all 的時間,因為tasker空閒沒任務,就馬上就行reload了。

這個是reload worker的時間:1566880275.1524    # 這個是worker的reload時間,因為在test()裡面sleep(30),而且超過了max_wait_time,底層不會繼續等待worker的任務完成,直接把舊的worker結束掉,結果也沒有印出'finish sleep',創建了新的worker。

#### 但是為什麼是10s才重新建立worker呢? max_wait_time設定為5s啊? ?這是我一直想不明白的。 ###

以上是swoole怎麼重啟的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器