【问题标题】:Are sockets reused on reconnect event?套接字是否在重新连接事件中重用?
【发布时间】:2016-07-06 07:45:41
【问题描述】:

当用户连接到服务器时会创建一个套接字。

由于 interwebz 故障,连接中断。

客户端自动重新连接。

socket连接会和他第一次连接时一样吗?或者插座会是一个新的吗?

谢谢!

【问题讨论】:

  • 这将是新的连接

标签: node.js socket.io reconnect


【解决方案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的一个问题,它必须工作,所以我不得不摆脱它。
    猜你喜欢
    • 2016-03-08
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2013-08-20
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多