我在使用Node.js和websocket(https://www.npmjs.com/package/ws)的“ WS”实现时遇到问题。经过一阵激增(短时间内有大量消息),我得到的数据表明我“错过了”一条消息。
所以我想知道:
非常感谢您的见解,
答案 0 :(得分:1)
我在nodejs中使用ws
来同时处理生产中来自许多客户端的大消息流,而我从未遇到过丢失消息的情况。每个服务器每秒处理来自数百个不同客户端连接的数千条消息。我的系统的工作方式是:如果ws丢弃了消息或更改了它们的顺序,我的用户就会大声抱怨。
这让我猜想您没有达到ws
的任何限制。
在编程工作的早期,我有一个不太聪明的想法,就是将传入的消息放在我的nodejs代码中的队列对象中,然后“稍后”处理它们。这导致通过我的服务器的消息流令人难以理解。有时似乎我丢失了ws消息。我很高兴删除所有这些代码,并在其消息事件处理程序中完全调度每条消息。
Websocket连接有时会异常关闭。因为网络。您可以使用错误和关闭事件处理程序来捕获这些情况。消息的发送者或接收者可能需要一段时间才能检测到某种网络故障中断了其连接。这可能导致在发送方和接收方之间的消息计数方面存在分歧。值得调查。
我用消息计数修饰ws的连接对象(“装饰”-向对象添加特定于应用程序的属性),并在连接关闭时将这些消息计数放入日志中。