【发布时间】:2013-10-20 19:32:57
【问题描述】:
我正在创建一个 socket.io 应用程序。当我在 Firefox 上创建与套接字的连接时,它建立得很好。当我使用 chrome 启动另一个到套接字的连接时,第一个客户端断开连接,然后两个客户端再次重新连接(使用相同的 socket.id)
这是我一直在使用的代码:
app.post('/auth', function(req, res){ // routes.auth(hash, db, io, pseudoArray, connections, Session));
var username = req.body.username,
password = req.body.password;
if (username != "" && password != ""){
authenticate(username, password, db, hash, function(err, user){
if (user) {
// Regenerate session when signing in
// to prevent fixation
console.log('user authenticated');
req.session.regenerate(function(){
req.session.user = user.name;
req.session.success = 'Authenticated as ' + user.name
+ ' click to <a href="/logout">logout</a>. '
+ ' You may now access <a href="/restricted">/restricted</a>.';
var Session = connect.middleware.session.Session;
io.sockets.on('connection', function (socket) {
var hs = socket.handshake;
console.log('A socket with sessionID ' + hs.sessionID + ' connected!');
socket.set('pseudo', req.session.user, function(){
pseudoArray.push(req.session.user);
socket.emit('pseudoStatus', req.session.user);
console.log("user " + req.session.user + " connected");
});
socket.on('pseudoOk', function(data){
// connections[data] = socket;
connections[data] = socket.id; // connected user with its socket.id
connectedUsers[socket.id] = socket;
console.log('----CONNECTIONS----');
console.log(connections);
console.log('++ USERS ++ ');
console.log(connectedUsers);
console.log('----END CONNECTIONS----');
});
socket.on('disconnect', function () {
console.log('A socket with sessionID ' + hs.sessionID + ' disconnected!');
// clear the socket interval to stop refreshing the session
// clearInterval(intervalID);
});
});
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true });
res.redirect('home');
});
} else {
console.log('auth failed');
req.session.error = 'Authentication failed, please check your '
+ ' username and password.'
+ ' (use "tj" and "foobar")';
res.redirect('login');
}
});
} else {
res.redirect('connect');
}
});
有什么线索吗?
主要问题是: 单台计算机 (localhost) 上的套接字连接能否在同一台计算机上的两个不同浏览器中工作?我在想的是,由于我在一台机器上使用了两个浏览器,所以两个浏览器都得到了相同的套接字 id。是这样吗?
【问题讨论】:
-
你能发布你的代码吗?
-
我已将代码添加到帖子中。
-
@amit 您正在从 HTTP 请求处理程序中设置
socket.io连接处理程序,这不是应该做的事情,很可能会导致各种未定义的行为(和内存可能会泄漏)。 -
@robertklep 我是 n00b。你能解释一下吗?
标签: javascript node.js socket.io