我想让一个 Node.js 进程运行,因为它正在检查 Redis 服务器是否有任何新的弹出。
另一个进程将偶尔进行推送,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);
});
}