简单探究一下swoole的热重启问题官方说可以顺利重启所有worker和tasker进程,通过$swoole->reload(),或者\swoole_process::kill($master_pid,SIGUSR1),或者直接kill-USR1master_pid等等。那我们就简单测试下swoole能否顺利重启。简单测试启动一个swoole_http_server,一个worker进程和一个tasker进程,然后浏览器发起http请求。请求的内容只是简单的睡觉。通过sleep函数,应该可以说明处理这个请求的worker处于工作状态,然后在sleep中进行reload操作。当第一次向swooleserver发起请求时,manager进程会将请求派发给worker处理,然后在worker休眠处理期间,如果有其他请求进来,manager不会派发后续请求到唯一的工作进程,因为工作进程仍在忙于处理第一个请求。这可以通过简单的测试来确认。http请求被简单地路由到下面。因为使用了easyswoole框架,执行phpeasyswoolereloadall命令,其实就是kill-USR1master_pid。服务器配置$swoole_server->set(['worker_num'=>1,'task_worker_num'=>1,'reload_async'=>true,'max_wait_time'=>5,]);开始测试1.任务逻辑写在进程中的workerhttp方法中publicfunctiontest(){$start=microtime(true);echo'请求开始时间:'.$开始。PHP_EOL;回声'pid:'。getmypid()。PHP_EOL;睡觉(30);#此处用于测试echo'finishsleep'的睡眠脚本。PHP_EOL;$end=微时间(真);echo'请求结束时间:'.$结束。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
