发布于 
pv: - | uv: -

WorkerMan reload平滑重启无效的解决方案

WorkerMan

Workerman是一款常驻内存的PHP服务框架, 它提供了一个更简单的方案供开发者, 开发TCP, UDP等服务.

且从他衍生出来的 Webman 采用MVC框架, 复用了绝大多数的类库, 如果你有Laravel相关的开发经验, 可以很轻松的尝试Webman.

目前来说 Timeletters (拾光) 的后端 所采用的是 Workerman加上自己改进的一套框架.

对于平滑重启

Workerman由于其常驻内存的特性, 修改代码并不会实时生效, 对此Workerman其实也有一套方案 > FileMonitor

通过定时监控代码的变更来自动reload.

回到解决方案

目前遇到的问题 是 fileMonitor能检测到文件变更, 也可以自动reload 但是业务返回仍然为原来的.

两种最简单的排查手段 >

  • reload只能 重新加载on**{}回调内的内容, 且必须是动态require或者采用自动加载机制引入的文件.

  • 检查缓存插件, 在这里我就是因为使用了Oocache插件导致了 reload无法生效, 卸载该插件 reboot服务器 即可