Closed fengwuhenyuyousheng closed 6 years ago
@fengwuhenyuyousheng
打开 https://github.com/fastdlabs/swoole/blob/master/src/Server.php#L425-L439 在 reload 方法里面重新注册 router 看看。大致类似下面这样:
<?php
/**
* @return int
*/
public function reload()
{
if (!$this->isRunning()) {
$this->output->writeln(sprintf('Server <info>%s</info> is not running...', $this->name));
return -1;
}
$pid = (int)@file_get_contents($this->getPidFile());
posix_kill($pid, SIGUSR1);
// 重新注册 router
app()->offsetUnset('dispatcher');
app()->offsetUnset('router');
app()->register(new RouteServiceProvider());
$this->output->writeln(sprintf('Server <info>%s</info> [<info>%s</info>] is reloading...', $this->name, $pid));
return 0;
}
我没有测试过,要是你测试没问题的话,欢迎提交 PR~:smile:
@JanHuang 另外,可以考虑在 reload 里面,重新加载应用配置。
自定义一个 HTTPServer
继承 FastD\Servitization\Server\HTTPServer
并重写 reload()
或是 onWorkerStart()
, 在 config/server.php
中改为自定义的 Server 类应该就可以的.
@zqhong 对,这个应该是由系统去做,应该是框架一个可以提升体验的一个点。
目前已经添加对swoole reload的支持。
swoole模式下,修改了routes文件,使用reload 命令没有效果,需要stop再start