ポップする新しいものがないかRedisサーバーをチェックしているので、Node.jsプロセスを実行したいと思います。
別のプロセスは散発的にプッシュを実行し、Nodeプロセスは入ってくるものをすべてポップしようとします。Nodeプロセスは実行を継続します。
誰かが私に良い方向を示すことができますか?
私はそのようなイベントを聞く方法を見つけようとしています。もちろん、一度ポップすることはできますが、NodeプロセスにRedisサーバーへの追加をリッスンし続けるにはどうすればよいですか?
ブロッキングポップを使用することをお勧めします:http://redis.io/commands/brpop
function waitForPush () {
client.brpop(['list','otherlist',0], function (listName, item) {
// do stuff
waitForPush();
});
}
これは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
});
process.nextTick(...)を使用した再帰関数の修正バージョンはどうですか
function waitForPush () {
client.brpop(['list','otherlist',0], function (listName, item) {
// do stuff
process.nextTick(waitForPush);
});
}