该程序的基本流程是接收 UDP 数据包,查找有关它们的一些信息,然后将它们发送出去以进行进一步处理。该信息当前存储在 mongodb 中。
伪 JS 类似于:
socket.on('message', function(message) {
mongo.lookup(message, function(err, object) {
furtherProcessing(object);
});
});
我注意到这个流程中有奇怪/烦人的行为。
由于 mongodb 是异步的,我观察到程序流在等待查找响应时切换到下一个数据包。这意味着,如果许多数据包到达,我们可能有多个 mongodb 请求交错(即程序正在等待多个数据包的回调)。不幸的是,来自 mongo 的响应似乎是随机顺序的(或者可能是 mongo 满足它们的顺序),这意味着当对象被传递给furtherProcessing
函数时,它们可能会被重新排序。
有没有办法对异步请求强制执行 FIFO 排序?也就是说,我可以保证发送到futherProcessing
的每个对象的顺序与从套接字接收到的顺序相同吗?