Fin*_*nwe 8 php zeromq websocket ratchet reactphp
我有一个小的websocket服务器,运行在一组库之上:
和
php-zmq包装器.代码与教程中的代码基本相同.
eventloop正确启动,用户可以连接到服务器,他们正在获取正确的消息,当另一方推送东西时,但过了一段时间,通常是几天(取决于使用情况)消息停止到达.
根本没有压倒性的使用 - 目前只有一两个前端开发人员连接,因为这是一个开发阶段.
循环正在运行,它在连接时正确返回HTTP 101切换协议,但不会广播之前正确广播的消息.没有任何错误.重新启动事件循环会有所帮助.
1)是什么导致这种情况?有人遇到过类似的行为吗?
2)你能推荐一种方法,我可以在长时间运行的事件循环过程中调试它吗?
目前,我必须停止循环,更改代码(添加日志记录调用),再次重新启动循环并等待它再次出错,这至少是乏味的.
任何帮助非常感谢.
嗯,我猜 ZMQ 是罪魁祸首。
当同一台机器上有多个应用程序使用 ZMQ 时,消息有时会到达错误的使用者 - 即使每个应用程序都指定了不同的端口用于连接到 ZMQ 套接字。
因此,用户有时会从完全不同的应用程序获取 Websocket 帧,并且当消息没有对应的用户时,该帧会在途中消失。所以 websocket 并没有停止广播,只是消息的路由不正确。
我对 ZMQ 以及这是否是有记录的或以其他方式已知的行为没有更多的了解。
我通过为每个应用程序使用单独的虚拟主机和通道将后端重写为 RabbitMQ 解决了这个问题。现在问题已经消失了,每一帧都结束在它应该的地方。