workerman 配置文件reload的问题

imxuyou

现在想用workerman实现一个后台服务,启动的时候主进程会解析一个配置文件,里面有一些upstream配置是所有worker共享的,所以在启动的时候会放入到共享内存中。

现在的问题是,在reload的时候主进程没有相应的回调接口,那worker怎么加载新的配置,如果放到worker的onWorkerReload回调,那upstream会被写到共享内存N次,不知道有没有其它办法?

另外有没有办法可以处理仅当主进程退出时做一些清理工作呢?
比如能不能让register_shutdown_function()不对worker生效

阅读 3587
2个回答

walkor

建议在onWorkerReload中读配置,配置没必要放共享内存,放配置文件即可,onWorkerReload时载入。workerman读取文件后可以常驻内存,运行过程中没有任何性能消耗。

如果只让某一个进程做某个事情,可以通过判断$worker->id,比如只让0号worker进程操作,

$worker->onWorkerReload = function($worker) {
    if ($worker->id === 0) {
       ...
   }
}

目前主进程不提供这样的接口,可以在onWorkerStart时给子进程初始化一个全局变量,register_shutdown_function里面判断下是否有这个变量,如果没有证明时主进程

  • 暂无评论
imxuyou

感谢回复
配置放共享内存是因为配置文件只能放静态的配置,比如一个服务由哪些后端提供,现在有一些配置是需要在运行过程中被任意worker修改的,比如某个后端坏掉了,需要动态的剔除掉。

希望有主进程的回调接口是因为当我的配置文件更新完手动reload的时候,希望由主进程去解析配置文件后放入共享内存,这样worker进程重启之后直接读共享内存就可以了,这里好像并不适合使用判断$worker->id的方式,我觉得在reload()的时候并不能保证某个id最先被启动

  • 暂无评论