workman重启时Socket链接断开

laoyao

CentOS6.2 64位 系统 CPU为64位单核CPU 开启进程数为1和2都试过了,reload的时候都会断开Socket链

4677 2 0
2个回答

walkor

以下摘自workerman手册

5、平滑重启
一般的重启的过程是把所有进程全部停止后,再开始创建全新的服务进程。在这个过程中会有一个短暂的时间内是没有进程对外提供服务的,这就会导致服务暂时不可用,这在高并发时势必会导致请求失败。

而平滑重启则不是一次性的停止所有进程,而是一个进程一个进程的停止,每停止一个进程后马上重新创建一个新的进程顶替,直到所有旧的进程都被替换为止。

平滑重启WorkerMan可以使用 php your_file.php reload命令,能够做到在不影响服务质量的情况下更新应用程序

如果是长连接,子进程重启后这个进程维护的连接就都断开了,是正常的。

为此官方基于workerman开发了GatewayWorker框架,Gateway进程维护客户端连接,连接上发来数据转由BusinessWorker处理,也即是业务逻辑都在BusinessWorker上,reload时只reload BusinessWorker即可做到业务逻辑更新(只能更新动态加载的php文件),而Gateway进程默认设置了http://doc3.workerman.net/worker-development/reloadable.html属性为false,不执行reload,这样执行reload的时候就不会重启,也就不会导致连接断开了

GatewayWorker框架手册:http://gatewayworker-doc.workerman.net/

  • 暂无评论
laoyao

感谢来自@walkor 的耐心解答,看来还是我对workman熟悉不够,按照您的回答我再修改修改。3Q

  • 暂无评论
年代过于久远,无法发表回答
🔝