node.js mqtt从callback中发布给蚊子代理

我不确定在使用node.js时如何callback“排队”,这导致了一个担心。

我有一个tcp服务器从节点mqtt客户端接收消息。 当消息到达mqtt客户端的onMessagecallback时,调用一个方法将其发送给任何连接的TCP客户端。 服务器进程(在高峰期)每秒大约150个消息,每个消息大小为50-300字节。

偶尔会有“神秘”的locking。 服务器正在运行,但没有消息传递给客户端。

我想到在tcp服务器完成为“最后”消息服务客户端之前,可能会有一个“新”消息到达,我不确定这是否会混淆东西。 我希望function处理“老”的消息处理程序可能会被推到一个堆栈,以便稍后到达 – 当所有新消息已被服务时继续。

目前我没有使用任何互斥或其他设备来防止重叠调用传递消息的函数。 所以我的问题是,我是否应该相信节点和mqtt客户端来处理这种可能重叠到达的消息传递级别,还是需要构build某种节stream,排队或静音机制? 如果是这样, kue模块是否合乎逻辑?

原来问题不在我的服务器,而是在客户端。 客户端无法跟上消息传递量(可能是由于某些终止代码)。

我通过将mqtt消息运行到一个dequeue并限制发送到客户端的消息数量,以便消息之间消逝不less于5 ms来find这一点。 令我惊讶的是(我高兴地),我做了这个之后,神秘消息停止的问题就消失了。

棘手的部分将是find最小的消息差距,这将允许客户端可靠地工作,同时确保队列不会超出合理的大小。 随着时间的推移,我会添加一些代码,通过丢失一些消息来pipe理最大队列大小,直到客户可以修复他们的客户端代码。