我写了一个简单的node.js / socket.io / express / redis服务器。当我杀死并重新启动服务器时,我正试图让客户端重新初始化。
我的客户端代码如下所示:
var socket = io.connect('http://' + location.hostname);
socket.on('connect', function (data) {socket.emit('join room', 'lobby' );});
我的服务器端代码如下所示:
var SessionSockets = require('session.socket.io')
, sessionSockets = new SessionSockets(io, sessionStore, cookieParser);
sessionSockets.on('connection', function (err, socket, session) {
clientConnect(err, socket, session)
});
function clientConnect(err, socket, session){
socket.on('join room', function (room) {
if (room == 'lobby')
lobby.connect(err,socket,session);
});
}
编辑: 出于某种原因,当我终止服务器( ctrl + c )并重新启动它时,会记录连接握手,并且服务器总是发出'connect'但是当客户端接下来并在收到连接时发出“加入房间”,服务器没有收到它(我在接收连接房间时正在做一个console.log。)
但是,如果我在发出'join room'之前发出客户端警报(主要是强制延迟),那么代码总是有效。当客户端发送“加入会议室”事件时,服务器是否可能尚未完全初始化?
答案 0 :(得分:1)
这里可能会出现许多问题,但首先您可以尝试收听有关重新连接的客户事件..
客户端代码,重新连接时监听
socket.on('reconnecting',function(){
socket.emit('join room','lobby');
});
(一种理论从未真正遇到过这种情况)
然后,当应用程序停止时,可能会出现不当行为,并且您正在使用Redis存储会话,重新启动应用程序,并且会话仍然可用..以解决此类问题
process.on("SIGINT",function(){
// clean up
});
或应用程序启动时确保它清理会话存储,然后继续..