我正在编写 REST api,它必须提供用户之间的实时通信。可以说我有db.orders
收藏。我有 api GET /order/{id}
。这个 api 应该等待order
文档中的一些变化。例如,它应该只在order.status
is时返回一些数据ready
。我知道如何进行长轮询,但我不知道如何检查数据库中出现/更改的数据。如果有一个应用程序实例会很容易 - 然后我可以在内存中执行此操作,如下所示:
var queue = []
// GET /order/{id}
function(req,res,next) {
var data = getDataFromDb();
if(data && data.status == 'ready') {
res.send(data);
return;
}
queue.push({id: req.params.id, req: req, res: res, next: next});
}
// POST /order/{id}
function(req,res,next) {
req.params.data.status = 'ready'
saveToDb(req.params.data);
var item = findInQueue(queue,req.params.id);
if(item) item.res.send(req.params.data);
}
第一个处理程序等待数据具有状态ready
,第二个将数据状态设置为ready
。它只是一个伪代码,缺少很多东西(例如超时)。
问题是当我想使用此类应用程序的许多实例时 - 我需要一些消息传递机制,它允许跨实例实时通信。
我阅读了有关 REDIS PUB/SUB 的信息,但我不确定是否可以以这种方式使用它...
我现在正在使用 node.js + restify + mongoDB。