改完Workerman代码必须重启服务才能生效,因其常驻内存、仅加载一次PHP文件且不自动重载;普通重启会中断连接,平滑重启(php start.php reload)可无感更新代码但不重载静态变量等状态。

Workerman主动推送信息的代码改完后必须重启服务才能生效,因为Workerman是常驻内存的PHP进程,类定义和业务逻辑加载一次后就长期驻留在内存中,不会自动重新读取磁盘上的新文件。
为什么改完代码必须重启
Workerman启动后,所有Worker进程会将PHP代码编译并缓存在内存里。后续请求全部复用这份内存中的代码,【不会重新解析或重载文件】。哪怕你只改了一行echo,不重启就永远看不到效果。
这和PHP-FPM每次HTTP请求都重新加载脚本完全不同——Workerman是长连接、长生命周期的服务模型。
重启方式选择
方法一:普通重启(有短暂中断)
执行 php start.php stop → 再执行 php start.php start。旧进程立即终止,新进程启动,期间连接会断开。
方法二:平滑重启(推荐用于线上)
直接运行 php start.php reload。主进程发送SIGUSR1信号,让正在处理请求的子进程完成当前任务后再退出,同时拉起加载新代码的子进程。用户无感知,连接不断开。
【注意】reload仅重载PHP代码,不重载全局静态变量、已建立的数据库连接、缓存数据等状态。若业务依赖这些,需在onWorkerStart或onConnect中做初始化补偿。
开发调试阶段快速验证
第一步:确保你在debug模式下启动服务
运行 php start.php start(不带 -d 参数),终端保持打开,输出可见。
第二步:修改完推送逻辑代码后,按 Ctrl+C 停止当前进程。
第三步:重新执行 php start.php start 启动新实例。
第四步:触发推送动作,观察日志和客户端是否收到新内容。
这一步操作起来很简单,直接把文件改完再重启就行,但千万别跳过重启——改了等于没改。

















