socket.io 1.2.1重新连接后如何修复双事件

时间:2015-01-07 15:29:29

标签: node.js sockets socket.io socket.io-1.0

在socket.io的博客中说,在版本1.2.1中

  

“README修复以防止重新连接时示例中的双重事件[@nkzawa]”

我为客户端&amp ;;下载了1.2.1版本服务器,但重新连接后仍然会调用两次事件。 或者我应该用自述文件做些什么?

我尝试这种方式重新连接并且它可以工作,但是我可以将它用于生产。它有多严格吗?

socket.disconnect()
// remove socket object
socket = undefined
// connect again
socket = io.connect({'forceNew':true})

正如我所说的那样是正确的还是有缺点?

更新,添加了代码

服务器端代码

socket.on('client_emited', function(data){
    socketIO.to('this socket id').emit('server_emitted');
})

客户端代码

var socket;
function connectSocket () {
   if (!socket)
     socket = io({'forceNew':true});
   else
     socket.connect();
}
socket.on('connect', function(){
   console.log('CONNECTED TO SOCKET.IO SERVER. SENDING "client_emited" EVENT');
   socket.emit('client_emited');
});
socket.on('server_emited', function(){
   console.log('RECEIVED "server_emited" EVENT');
});
socket.connect(); // here console shows 'CONNECTED TO SOCK...' and 'RECEIVED "server_e...' 1 time
socket.disconnect();
socket.connect(); // here console shows 'CONNECTED TO SOCK...' 2 times and 'RECEIVED "server_e...' 4 times time

并且服务器两次收到“client_emit”事件

1 个答案:

答案 0 :(得分:7)

解决方案是:

socket.on('connect', function(){....});

更改为

socket.once('connect', function(){....});

有关详细信息,请阅读issue on github