2012-11-29 93 views
0

我正在用nodejs中的redis和socketio嘗試pubsub。帶有socketio的nodejs中的redis pubsub:這是不是發佈者發佈消息?

我的服務器端代碼:

var io = require('socket.io').listen(server); 
var pub = redis.createClient(); 

io.sockets.on("connection", function(socket) { 
    console.log('connecteed'); 

    var sub = redis.createClient(); 

    sub.subscribe("messages"); 
    sub.on("message", function(channel, message) { 
     console.log('message',message); 
     socket.emit(channel,message); 
    }); 

    socket.on("disconnect", function() { 
     sub.unsubscribe("messages"); 
     sub.quit(); 
    }); 
}); 
pub.publish("messages", JSON.stringify({type: "foo", content: "bar"})); 

我的HTML頁面的index.html包含以下腳本:

var host = window.location.host.split(':')[0]; 
var socket = io.connect('http://' + host); 
socket.on('messages',function(msg){ 
    console.log(msg); 
}) 

但index.html中的console.log從不執行。

這是基本的,但我沒有在我的代碼中找到錯誤。它在哪裏?

回答

0

這可能是因爲您發佈消息時沒有連接任何客戶端(提示io.socket.on connect函數在pub.publish後執行)。試着用

setIntervall(function(){ 
    pub.publish("messages", JSON.stringify({type: "foo", content: "bar"})); 
},1000); 

該更換

pub.publish("messages", JSON.stringify({type: "foo", content: "bar"})); 

將發送消息每一秒,並會給你足夠的時間來驗證您的設置。

+0

是的,現在它工作。看起來沒有一個事件在套接字連接時觸發,我認爲這很奇怪,可能它需要更多的事件 –