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