【发布时间】:2015-04-15 04:01:17
【问题描述】:
每当我使用socket.disconnect(); 断开连接然后使用socket.connect(); 重新连接时,服务器都会运行我的握手代码两次。奇怪的是,即使服务器连接代码运行了两次,重新连接后我的阵列中也只有一个连接。这发生在意外断开连接、故意断开连接或即使服务器重新启动时。代码:
io.on('connection', OnConnect);
function OnConnect(socket) {
var connection = { socket: socket, realIp: ip, token: GenerateConnToken() };
connections.push(connection);
console.log('Connected');
// Client will respond to this by emitting "client-send-info".
// This is emitted once on initial connect, but twice on reconnect.
socket.emit('acknowledge', connection.token);
socket.on('client-send-info', function() {
console.log('Client Sent Info');
});
socket.on('disconnect', function() {
console.log('Disconnected');
});
}
上面的代码,当一个客户端连接,断开,然后重新连接一次,会产生如下日志:
已连接
客户发送信息
断开连接
已连接
客户发送信息
客户发送信息
为什么重新连接时,连接代码会运行两次,但只创建一个连接对象?
编辑:经过进一步检查,当客户端重新连接时,我的连接代码的不同部分似乎被执行了两次。上述代码已更新以反映相关信息。
【问题讨论】:
标签: javascript node.js sockets socket.io