node.js mqtt从回调发布到mosquitto代理

罗伊·HB

我不确定使用node.js时如何“排队”回调,这会带来麻烦。

我有一台tcp服务器,它从节点mqtt客户端接收消息。当消息到达mqtt客户端的onMessage回调中时,将调用一个方法,将其发送到任何已连接的TCP客户端。服务器每秒处理(高峰)大约150条消息,每个消息50-300字节。

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

在我看来,有可能在tcp服务器完成为服务于客户端的“最后”消息之前出现了“新”消息,并且我不确定这是否会造成混乱。我希望处理“较旧”消息处理程序的函数可能会被推到堆栈上,以利于以后的到达-在为所有新消息提供服务后继续执行。

目前,我不使用任何互斥锁或其他设备来防止对传递消息的函数的重复调用。所以我的问题是,我是否应该信任节点和mqtt客户端来处理可能出现重叠到达的消息传递级别,还是我需要构建某种节流,排队或静音机制?如果是这样,那么kue模块会成为顺理成章的方法吗?

罗伊·HB

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

通过将mqtt消息放入出队并限制发送给客户端的消息数量,使消息之间的间隔时间不少于5毫秒,我发现了这一点。令我惊讶的是(我很高兴)在完成此操作后,停止出现神秘消息的问题就消失了。

棘手的部分是找到最小的消息间隙,该间隙将允许客户端可靠地工作,同时确保队列不会增长到超出合理大小的范围。在时间允许的情况下,我将添加一些代码以通过丢失一些消息来管理最大队列大小,直到客户可以修复其客户代码为止。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章