hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - PHP框架 - Swoole - 正文 请牢记本站网址www.sosophp.cn

swoole怎样重启【swoole】,swoole

2019-12-11Swoole搜搜PHP网49°c
A+ A-

官方说是能够腻滑重启一切的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网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
swoole怎样重启【swoole】,swoole

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签: