8

ポップする新しいものがないかRedisサーバーをチェックしているので、Node.jsプロセスを実行したいと思います。

別のプロセスは散発的にプッシュを実行し、Nodeプロセスは入ってくるものをすべてポップしようとします。Nodeプロセスは実行を継続します。

誰かが私に良い方向を示すことができますか?

私はそのようなイベントを聞く方法を見つけようとしています。もちろん、一度ポップすることはできますが、NodeプロセスにRedisサーバーへの追加をリッスンし続けるにはどうすればよいですか?

4

3 に答える 3

15

ブロッキングポップを使用することをお勧めします:http://redis.io/commands/brpop

function waitForPush () {
  client.brpop(['list','otherlist',0], function (listName, item) {
    // do stuff
    waitForPush();
  });
}
于 2013-03-24T19:34:00.173 に答える
12

これはpub/subの良いユースケースのようです:http://redis.io/topics/pubsub

散発的にRedisにプッシュするNode.jsプロセスは、何かをプッシュするたびにチャネルに公開することもできます。このような:

var pushClient = redis.createClient();
//push something onto Redis
pushClient.publish("pubsub-channel", "Just pushed something onto Redis");

次に、他のプロセスがそのチャネルにサブスクライブします。メッセージイベントが発生するたびに、プッシュされたものはすべてポップオフします。

var client = redis.createClient();
client.subscribe("pubsub-channel");
client.on("message", function(channel, message){
//pop off new item
});
于 2013-05-22T19:57:47.640 に答える
2

process.nextTick(...)を使用した再帰関数の修正バージョンはどうですか

function waitForPush () {
  client.brpop(['list','otherlist',0], function (listName, item) {
    // do stuff
    process.nextTick(waitForPush);
  });
}
于 2016-05-13T18:26:16.687 に答える