关于swoole_framework的热更新

继续折腾swoole,本来觉得zphp不错,还是不习惯zphp的配置方式,当然zphp最强大的就是配置。

使用swoole_framework做应用服务器,可以实现一次加载,性能较php-fpm有提升,这也带来个新问题,代码如何热更新?swoole_framework提供了解决方法,需要安装runkit扩展。

先看swoole_framework实现热更新的代码:

//函数在swoole_framework框架swoole目录下
function reloadController($mvc, $controller_file) {
    //如果runkit扩展开启 配置项中热更新打开
    if (extension_loaded('runkit') and $this->config['apps']['auto_reload']) {
        clearstatcache();
        $fstat = stat($controller_file);
        //修改时间大于加载时的时间
        if ($fstat['mtime'] > $this->env['controllers'][$mvc['controller']]['time']) {
            runkit_import($controller_file, RUNKIT_IMPORT_CLASS_METHODS | RUNKIT_IMPORT_OVERRIDE);
            $this->env['controllers'][$mvc['controller']]['time'] = time();
        }
    }
}

从代码中可以看到,是根据文件的修改时间来判断的,这本身没有问题,问题是在swoole.ini中设置了无效.

[apps]
charset = "utf-8"
auto_reload = 1
apps_path = "/home/project/servers/paopao/apps"
;是否处理静态文件
do_static = off

来看看获取auto_reload值的代码:

$this->config['apps']['auto_reload']

这里是去不到swoole.ini里面的值的,在项目configs目录下添加一个apps.php文件:

return array(
    'auto_reload'=>1 //fix swoole.ini
);

问题解决,现在修改controllers就可以达到热更新的目的了。

标签: swoole_framework, runkit

添加新评论