シンプルな 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) して再起動すると、接続ハンドシェイクがログに記録され、サーバーは常に「接続」を発行しますが、クライアントがスーツに従い、受信時に「ルームに参加」を発行すると、サーバーに接続しても受信されません(ルームに参加するときにconsole.logを実行しています。)
ただし、「ルームに参加」を発行する前にクライアント側のアラートを設定すると (基本的に遅延が強制されます)、コードは常に機能します。クライアントが「ルームに参加」イベントを送信したときに、サーバーが完全に初期化されていない可能性はありますか?