【问题标题】:Does socket io handle ping pong automatically?socket io 会自动处理乒乓球吗?
【发布时间】:2021-03-12 03:58:51
【问题描述】:
  1. 我一直怀疑 socket io 会自动处理 ping/pong 吗?。我知道 pingTimeoutpingInterval 导致我出现这种困惑。

  2. 为了实现持久的 socket.io 连接,我们需要 ping/pong 消息,我说的对吗

  3. 如果 socket.io 没有自动处理,我自己创建一个 ping 和 pong 事件可以吗,客户端发送一个 ping 消息,服务器每隔一段时间用一个 pong 消息响应

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    Socket.io 会自动为您完成这项工作。在 socket.io 圈子中,这个概念被称为 heartbeat 机制,而不是 ping/pong

    也可以配置 ping/pong 间隔:

    const httpServer = require("http").createServer();
    const io = require("socket.io")(httpServer, {
      pingInterval: 10000, // how often to ping/pong.
      pingTimeout: 30000 // time after which the connection is considered timed-out.
    })
    

    来自the docs:

    ping 超时 默认值:5000

    此值用于心跳机制,它会定期检查服务器和客户端之间的连接是否仍然存在。

    服务器发送ping,如果客户端在pingTimeout ms内没有回复pong,则服务器认为连接已关闭。

    同样,如果客户端在 pingInterval + pingTimeout ms 内没有收到来自服务器的 ping,客户端也认为连接已关闭。

    在这两种情况下,断开连接的原因都是:ping timeout

    您应该将 socket.io 视为基于 WebSockets 的abstraction。它应该自动处理 WebSocket 连接的琐碎事务,因此您可以专注于发送/接收消息。

    现在回答你的问题:

    如果socket.io没有自动处理,我自己创建一个ping和pong事件可以吗,客户端发送一个ping消息,服务器每隔一段时间用一个pong消息响应。

    是的,你可以,但这是完全没有必要的,因为 socket.io 会为你做到这一点。

    为了实现持久的 socket.io 连接,我们需要 ping/pong 消息,对吗?

    不,再次,socket.io 会为你做这些。

    如果socket.io没有自动处理,我自己创建一个ping和pong事件可以吗,客户端发送一个ping消息,服务器每隔一段时间用一个pong消息响应。

    又是不必要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多