0

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が実行されることはありません。

初歩的なものですが、コードにエラーが見つかりません。それはどこにある?

4

1 に答える 1

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);

これにより、毎秒メッセージが送信され、設定を確認するための十分な時間が与えられます。

于 2012-12-09T16:05:56.727 に答える