使用redis for pub-sub时不需要的多条消息

Kay*_*ast 4 publish-subscribe redis node.js socket.io node-redis

当我使用socket.io执行pub/sub时,下面的代码工作得很好.

基本上,我从浏览器发送聊天消息.在服务器上,我收听此消息并将其发回给所有来自服务器的相同消息.所以,我希望每发送一条消息都会返回/打印1条消息.

通过以下内容,我可以从多个浏览器登录,当我发送聊天消息时,它会按预期返回/打印为单个聊天消息.

io.use(socketHandshake({store: sessionStore, key:'jsessionid', secret:'secret', parser:cookieParser()}));
io.on('connection', function (socket) {
    socket.on('chat', function (message) {
        io.emit('chat', "hello world");
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用redis做pub/sub时,会出现问题.

从第一个浏览器:1个聊天消息导致打印出1个聊天消息

从第二个浏览器:1个聊天消息导致打印出2个聊天消息

从第三个浏览器:1个聊天消息导致打印出3个聊天消息

var sub = redis.createClient();
var pub = redis.createClient();
sub.subscribe('chat');
io.use(socketHandshake({store: sessionStore, key:'jsessionid', secret:'secret', parser:cookieParser()}));
io.on('connection', function (socket) {
    socket.on('chat', function (message) {
        // io.emit('chat', "hello world");
        pub.publish('chat', "hello world");
    });
    sub.on('message', function (channel, message) {
        io.emit(channel, message);
    });
});
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我是初学者,我正在尝试这个例子http://blog.cloudfoundry.org/2013/01/24/scaling-real-time-apps-on-cloud-foundry-using-node-js-and -redis /使用最新版本的express,socket.io,socket.io-handshake和redis.

我对这个redis pub/sub感到难过.请帮忙.

msc*_*dex 8

您为每个连接添加了一个新的"消息"处理程序.这就是为什么你开始看到越来越多的连接越来越多的重复.尝试移动你sub.on('message', ...);的socket.io连接处理程序.