我不确定使用 node.js 时回调是如何“排队”的,这会导致担忧。
我有一个从节点 mqtt 客户端接收消息的 tcp 服务器。当消息到达 mqtt 客户端的 onMessage 回调时,会调用一个方法将其发送到任何已连接的 TCP 客户端。服务器每秒处理(峰值)大约 150 条消息,每条消息 50 - 300 字节。
偶尔会有“神秘”锁定。服务器正在运行,但没有消息传递给客户端。
我突然想到,在 tcp 服务器完成使用“最后一个”消息为客户端提供服务之前,可能有一个“新”消息到达,我不确定这是否会混淆事情。我希望处理“较旧”消息处理程序的函数可能会被推送到堆栈上,以支持后来的到达 - 在所有新消息都得到服务后继续。
目前我没有使用任何互斥锁或其他设备来防止对传递消息的函数的重叠调用。所以我的问题是,我应该信任节点和 mqtt 客户端来处理可能重叠到达的这种级别的消息传递,还是我需要构建某种节流、排队或互斥机制?如果是这样,kue 模块会是一个合乎逻辑的方式吗?