【发布时间】:2015-03-05 13:04:22
【问题描述】:
在 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”事件
【问题讨论】:
-
问题可能出在创建消息事件处理程序的代码中。您需要确保只调用该代码一次,或者在开始新的事件处理程序之前删除事件处理程序。请向我们展示该代码。
-
感谢回复,一分钟后显示
-
先生,我正在更正代码以使其易于理解,它将在 2-3 分钟内完成。虽然你能写下你对第二种方法的看法吗:首先断开连接,删除套接字对象,然后再次连接。可以用吗?
-
我对第二种方法没有意见(我自己从未尝试过)。这似乎是一种可能会产生其他后果的解决方法,我希望您解决真正的问题。
-
先生,感谢您的等待,我添加了我的代码
标签: node.js sockets socket.io socket.io-1.0