socket.io 1.2.1如何在重新连接后解决双重事件
在socket.io的博客中说,在1.2.1版本中
“自述文件修复,以防止在重新连接的示例中的双重事件[@nkzawa]”
我为客户端和服务器下载了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”事件
解决scheme是:
socket.on('connect', function(){....});
改成
socket.once('connect', function(){....});
有关更多信息,请阅读github上的问题