8

我想让一个 Node.js 进程运行,因为它正在检查 Redis 服务器是否有任何新的弹出。

另一个进程将偶尔进行推送,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 回答