我想讓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