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消息响应。
又是不必要的。