我有一个网络应用程序,我在其中将模型更改流式传输到 chrome 客户端中的主干集合。有一些主干视图可能会或可能不会呈现页面的某些部分,具体取决于更新的类型和正在查看的内容。例如,对模型的某些更改会导致重新渲染集合的视图,并且可能会或可能不会为正在更新的模型打开详细信息面板视图。这些模型更改可能发生得非常快,因为服务器端工作流程涉及对模型的非常冗长和快速的更改。
这是问题所在:当向客户端发送消息时,我在网络服务器的进程中收到大量 errno 32 管道损坏消息,尽管 websocket 连接仍然处于打开状态并且它readyState
仍然是 1(打开)。
我怀疑正在发生的事情是,onmessage
当下一条消息进来时,各种视图还没有在回调中完成渲染。在我在标准输出中获得这些回溯后,websocket 连接仍然可以工作,并且 UI 仍然会更新。
如果我放入eventlet.sleep(0.02)
从消息队列中读取模型更改并将它们发送到 websocket 的循环中,那么损坏的管道消息就会消失,但这不是一个真正的解决方案,感觉就像一个讨厌的 hack。
有没有人对 websocket 的功能有类似的问题,onmessage
试图做太多的工作并且在下一条消息进来时仍然很忙?有人有解决方案吗?