我想让Node.js进程运行,因为它正在检查Redis服务器是否有新的弹出窗口。如何从Redis弹出对象,因为它们是实时添加的?
另一个进程将会偶尔进行推送,并且Node进程将试图弹出进来的任何消息.Node进程将保持运行。
任何人都可以指点我一个好方向吗?
我想弄清楚如何听这样的事件。当然,我可以弹出一次,但是如何让Node进程继续监听Redis服务器的任何添加?
我想让Node.js进程运行,因为它正在检查Redis服务器是否有新的弹出窗口。如何从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
你Node.js的过程,偶尔推向Redis的能每次推送内容时也会发布到频道。像这样:
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);
});
}
感谢回答,但我真的坚持'如何倾听'部分。我无法围绕使用什么战略。我想过运行一个while循环,运行一个服务器,等等。 – deeJ 2013-03-24 19:39:19
如果在您提供的列表中有任何内容,或者如果没有它会阻止Redis客户端,直到出现某些内容,则阻止弹出窗口。 – generalhenry 2013-03-24 19:41:08
那么,一个可能的解决方案是有一个递归函数来连续检查?我应该尝试一下。谢谢。! – deeJ 2013-03-24 19:44:44