是否有一种方法可以使用websoket重载Node.js事件循环

问题描述 投票:1回答:1

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

  • 我已经联系了发射服务器的所有者,他向我保证所有消息都已经发送到他的身边。
  • 我已经记录了我身边收到的每条消息(在函数on('message',()=> {}的开头),我似乎找不到消息,所以我的假设是甚至没有达到这一点

所以我想知道:

  • 消息将按FIFO顺序显示和处理。在处理当前消息期间,新消息将堆叠在节点事件循环中,然后立即进行计算。对吗有没有一种方法可以使事件循环变得“太大”而可能丢弃新的传入消息?如果是这样,它会悄悄地掉下来吗?还是程序严重崩溃(换句话说,如何查看消息是否已被丢弃?)
  • 'ws'模块对收到的最大邮件数量有任何已知的限制吗?它是否具有丢弃消息的内部方式?
  • 是否有比“ ws”模块更好的替代品?
  • 还有其他方法可以解释“缺失”消息吗?

非常感谢您的见解,

node.js websocket event-loop
1个回答
0
投票

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

这让我猜测您没有达到ws的任何限制。

[在我的编程工作初期,我有一个不太聪明的想法,就是将传入消息放入我的nodejs代码中的队列对象中,然后对其进行“后期处理”。这导致通过我的服务器的消息流令人难以理解。有时似乎我丢失了ws消息。我很高兴删除所有代码,并在其消息事件处理程序中完全分派每条消息。

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

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.