套接字是不是在重新连接事件中重用?
Posted
技术标签:
【中文标题】套接字是不是在重新连接事件中重用?【英文标题】:Are sockets reused on reconnect event?套接字是否在重新连接事件中重用? 【发布时间】:2016-07-06 07:45:41 【问题描述】:当用户连接到服务器时会创建一个套接字。
由于 interwebz 故障,连接中断。
客户端自动重新连接。
socket连接会和他第一次连接时一样吗?或者插座会是一个新的吗?
谢谢!
【问题讨论】:
这将是新的连接 【参考方案1】:重新连接时会建立新连接。可以通过打印socket.id来检查。
在服务器上:
var io = require('socket.io)(server);
io.on('connection', function (socket)
console.log('socket id is ' + socket.id);
Excerpt from socket.io documentation
该属性在套接字连接后存在,在套接字断开连接时删除,并在套接字重新连接时更新。
【讨论】:
【参考方案2】:我还想在电子应用程序中重新连接后保留状态(例如,如果主机暂停然后恢复,socket.io 会断开连接)。
我还没有尝试过,但是下面的文章讨论了如何在重新连接之间重用套接字 ID。如果我有任何成功,我会更新: https://newbedev.com/reuse-socket-id-on-reconnect-socket-io-node-js
【讨论】:
这里发生了什么 - 我没有成功实现上述方法 - 尽管套接字 id 可以通过重新连接传递,但由于 socket.io 内部的原因,实际的套接字仍然以不同的 id 结束。此外,创建了一个新的套接字对象,这意味着不再附加套接字对象上的事件侦听器,因此使用 socket.io 似乎不可能实现真正透明的重新连接。 相反,我删除了 socket.io 客户端和服务器,并在服务器上使用带有 ws (github.com/websockets/ws) 的原始浏览器 websockets 编写了我自己的实现。我还使用了 RPC 机制,类似于通过消息后类型接口传递回调的机制。它产生更少的网络请求、更少的代码和 3rd 方模块,并且重新连接工作完美,并且可以完全透明,所以对于客户端来说,它看起来总是连接的。似乎透明地重新连接似乎是socket.io的一个问题,它必须工作,所以我不得不摆脱它。以上是关于套接字是不是在重新连接事件中重用?的主要内容,如果未能解决你的问题,请参考以下文章