1

ユーザー間のリアルタイム通信を提供するREST APIを書いています。db.ordersコレクションがあるとしましょう。そして私は api を持っていGET /order/{id}ます。この API は、ドキュメントの変更を待つ必要がありorderます。たとえば、 is の場合にのみ何らかのデータを返す必要order.statusがありreadyます。ロングポーリングの方法は知っていますが、データベースでデータが表示/変更されることを確認する方法がわかりません。アプリ インスタンスが 1 つあれば簡単です。次のように、メモリ内でこれを行うことができます。

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、2 番目のハンドラーはデータのステータスを に設定しますready。これは単なる疑似コードであり、多くのものが欠落しています (タイムアウトなど)。

問題は、そのようなアプリの多くのインスタンスを使用したい場合です。インスタンス間でリアルタイムで通信できるメッセージングメカニズムが必要です。

REDIS PUB/SUB について読みましたが、この方法で使用できるかどうかわかりません...

今のところ、node.js + restify + mongoDB を使用しています。

4

1 に答える 1