我不确定回调是如何排队的'当使用node.js时会引起担心。
我有一个tcp服务器,它从节点mqtt客户端接收消息。当消息到达mqtt客户端的onMessage回调时,会调用一个方法将其发送到任何连接的TCP客户端。服务器处理(峰值)大约每秒150条消息,每条50-300字节。
偶尔会有一个神秘的东西。锁定。服务器正在运行,但没有消息传递给客户端。
我突然想到一个新的'消息到达tcp服务器完成后,使用' last'消息,我不确定这是否会混淆事情。我希望功能处理能够处理更早的'消息处理程序可能会被推入堆栈以支持以后到达 - 在所有新消息都得到服务后继续。
目前我没有使用任何互斥锁或其他设备来防止重复调用传递邮件的功能。所以我的问题是,我是否应该信任节点和mqtt客户端来处理这种级别的消息传递以及可能的重叠到达,或者我是否需要构建某种 限制,排队或静音 机械?如果是这样,kue module是否合乎逻辑?
答案 0 :(得分:2)
原来问题不是在我的服务器中,而是在客户端客户端。客户端无法跟上消息传递量(可能是由于他们端的一些阻塞代码)。
我通过将mqtt消息运行到队列并限制发送到客户端的消息数量来发现这一点,这样消息之间的消息不会少于5毫秒。令我惊讶的是(并且愉快地),在我这样做之后,停止问题的神秘信息消失了。
棘手的部分是找到最小的消息间隙,使客户端能够可靠地工作,同时确保队列不会超出合理的大小。随着时间的推移,我可以通过丢失一些消息来添加一些代码来管理最大队列大小,直到客户可以修复他们的客户端代码。