socket.io 1.2.1 如何在重新连接后修复双重事件
Posted
技术标签:
【中文标题】socket.io 1.2.1 如何在重新连接后修复双重事件【英文标题】:socket.io 1.2.1 How to fix double events after reconnect 【发布时间】: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 分钟内完成。虽然你能写下你对第二种方法的看法吗:首先断开连接,删除套接字对象,然后再次连接。可以用吗? 我对第二种方法没有意见(我自己从未尝试过)。这似乎是一种可能会产生其他后果的解决方法,我希望您解决真正的问题。 先生,感谢您的等待,我添加了我的代码 【参考方案1】:解决办法是:
socket.on('connect', function()....);
改成
socket.once('connect', function()....);
更多信息请阅读issue on github
【讨论】:
以上是关于socket.io 1.2.1 如何在重新连接后修复双重事件的主要内容,如果未能解决你的问题,请参考以下文章
当套接字重新连接时,如何让 socket.io 服务器向特定套接字重新发送消息?