微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

“README fixes to prevent double events in the example upon reconnection [@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”事件两次

解决方法

解决方案是:

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

改成

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

有关更多信息,请阅读issue on github

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐