这是一个使用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::
我一直在重写应用程序的不同部分,但我无法理解为什么服务器将相同的信息应答到不同的套接字。