Express4 + Socket.io 0.9:不同的客户端获得相同的非广播消息

时间:2015-01-20 17:34:16

标签: javascript node.js sockets express socket.io

这是一个使用passport.js身份验证的网站。

两个不同的用户从不同的浏览器连接,他们请求有关其用户名的信息。服务器获取信息并使用socket.io发送回来。

一切都像魅力一样,但如果两个客户端同时加载页面,其中一个客户端的信息将转到两个浏览器,看起来服务器正在同一个套接字上写入。

服务器端:

server.js:

var express  = require('express');
var app      = express();
var http     = require('http').createServer(app).listen(8000),
io           = require('socket.io').listen(http);

socket.js:

module.exports = function(app, io) {
  ...
  io.sockets.on('connection', function(socket) { 
    ...
    //Build the information about the user and send it back
    var userData = userInfo();
    socket.emit('userInfo', userData);
    ...
   }
}

客户端(index.ejs中包含的javascript文件):

var socket = io.connect('http://URL:8000');
...
socket.emit("all", {data}); //Hi, I need information about me.
... 
socket.on('userInfo', function (data) {
        // do some stuff...
});

控制台中的服务器调试获取有关两个套接字的信息:

       debug - client authorized
       info  - handshake authorized Cq71N34XLyAJBTIbHCZQ
       debug - setting request GET /socket.io/1/websocket/Cq71N34XLyAJBTIbHCZQ
       debug - set heartbeat interval for client Cq71N34XLyAJBTIbHCZQ
       debug - client authorized for 
       debug - websocket writing 1::
...
       debug - client authorized
       info  - handshake authorized UF6lOwOFzgjrWY54HCZP
       debug - setting request GET /socket.io/1/websocket/UF6lOwOFzgjrWY54HCZP
       debug - set heartbeat interval for client UF6lOwOFzgjrWY54HCZP
       debug - client authorized for 
       debug - websocket writing 1::

我一直在重写应用程序的不同部分,但我无法理解为什么服务器将相同的信息应答到不同的套接字。

0 个答案:

没有答案