node.js - 有没有办法使用 websoket 重载 Node.js 事件循环
问题描述
我遇到了 Node.js 和 websocket 的“WS”实现(https://www.npmjs.com/package/ws)的问题。在激增(在很短的时间内收到大量消息)之后,我得到的数据表明我“错过了”一条消息。
- 我已经联系了发射器服务器的所有者,他向我保证所有消息都已发送到他身边。
- 我已经记录了我收到的每条消息(在函数的开头 on('message', () => {}),我似乎找不到该消息,所以我的假设是它没有甚至达到了这一点
所以我想知道:
- 消息按 FIFO 顺序接收和处理。在当前消息的处理过程中,新的消息将被堆叠在节点事件循环中,以便在之后立即计算。正确的 ?有没有办法让事件循环“太大”,可能会丢弃新的传入消息?如果是这样,它会悄悄地放下它吗?或者程序是否剧烈崩溃(换句话说,我如何查看是否以这种方式丢弃了消息?)
- 'ws' 模块对于接收的最大消息数量是否有任何已知限制?它有内部丢弃消息的方式吗?
- 有比“ws”模块更好的选择吗?
- 有没有其他方法来解释“错过”的消息?
非常感谢您的见解,
解决方案
我ws
在 nodejs 中使用在生产中同时处理来自许多客户端的大型消息流,而且我从未让它丢失消息。每个服务器每秒处理来自数百个不同客户端连接的数千条消息。我的系统工作方式,如果 ws 丢弃消息或更改他们的顺序,我的用户会大声抱怨。
这让我猜你没有达到ws
.
在我的编程工作的早期,我有一个不太聪明的想法,就是将传入的消息放入我的 nodejs 代码中的队列对象中并“稍后”处理它们。这导致通过我的服务器的消息流非常混乱。有时看起来我丢失了 ws 消息。我很高兴删除所有代码,并在其消息事件处理程序中完全发送每条消息。
Websocket 连接有时会异常关闭。因为网络。您可以通过错误捕获这些情况并关闭事件处理程序。消息的发送者或接收者可能需要一段时间才能检测到某种网络故障中断了其连接。这可能会导致发送者和接收者之间对消息计数产生分歧。值得研究。
我用消息计数装饰 ws 的连接对象(“装饰”——向对象添加特定于应用程序的属性),并在连接关闭时将这些消息计数放入日志中。
推荐阅读
- installation - 为什么在安装 Couch DB 时出现 Prematurely Ended 错误?
- c++ - 来自c ++中下一个/新行的ifstream
- python - Pycharm Python 无法运行现有的 jupyter notebook,只有我自己创建
- google-sheets - 从工作表中查找和过滤数据的公式
- ms-access - 组合两个访问查询
- python - 无法使用 tensorflow 和 pytorch 创建 conda 环境
- jestjs - 使用 Jest 测试客户端模块
- time-series - GARCH 模型直觉
- react-native - react-native 地图:marginBottom 不适用于 iOS 上的标记元素样式(适用于 Android)
- angular - 如何将这些数据保存在我的数据库中?(弹簧+角度)