cari
Rumahrangka kerja phpSwooleswoole怎么重启

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 < 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啊??这个是我一直想不明白的。

Atas ialah kandungan terperinci swoole怎么重启. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual