nodejs中的redis pubsub与socketio:wht没有发布者发布消息?

时间:2012-11-29 17:29:33

标签: javascript websocket redis socket.io publish-subscribe

我正在使用nodejs中的redis和socketio尝试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永远不会被执行。

它是基本的,但我在代码中找不到错误。它在哪里?

1 个答案:

答案 0 :(得分:0)

这可能是因为您在发布消息时没有连接任何客户端(提示io.socket.on连接函数在pub.publish之后执行)。尝试替换

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

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

这将每秒发送一次消息,并为您提供足够的时间来验证您的设置。