旗下导航:搜·么
当前位置:网站首页 > PHP框架 > Swoole > 正文

swoole怎样重启【swoole】,swoole

作者:搜搜PHP网发布时间:2019-12-11分类:Swoole浏览:112


导读:官方说是能够腻滑重启一切的worker和tasker历程,能够经由过程$swoole->reload(),或许\swoole_process::kill($mas...

官方说是能够腻滑重启一切的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 < 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";
          }
   });

测试效果:

要求入手下手时候: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怎样重启的细致内容,更多请关注ki4网别的相干文章!

标签:swoole