首页 > 解决方案 > 有没有办法使用 websoket 重载 Node.js 事件循环

问题描述

我遇到了 Node.js 和 websocket 的“WS”实现(https://www.npmjs.com/package/ws)的问题。在激增(在很短的时间内收到大量消息)之后,我得到的数据表明我“错过了”一条消息。

所以我想知道:

非常感谢您的见解,

标签: node.jswebsocketevent-loop

解决方案


ws在 nodejs 中使用在生产中同时处理来自许多客户端的大型消息流,而且我从未让它丢失消息。每个服务器每秒处理来自数百个不同客户端连接的数千条消息。我的系统工作方式,如果 ws 丢弃消息或更改他们的顺序,我的用户会大声抱怨。

这让我猜你没有达到ws.

在我的编程工作的早期,我有一个不太聪明的想法,就是将传入的消息放入我的 nodejs 代码中的队列对象中并“稍后”处理它们。这导致通过我的服务器的消息流非常混乱。有时看起来我丢失了 ws 消息。我很高兴删除所有代码,并在其消息事件处理程序中完全发送每条消息。

Websocket 连接有时会异常关闭。因为网络。您可以通过错误捕获这些情况并关闭事件处理程序。消息的发送者或接收者可能需要一段时间才能检测到某种网络故障中断了其连接。这可能会导致发送者和接收者之间对消息计数产生分歧。值得研究。

我用消息计数装饰 ws 的连接对象(“装饰”——向对象添加特定于应用程序的属性),并在连接关闭时将这些消息计数放入日志中。


推荐阅读