我正在关注这些文档:https://socket.io/docs/v4/connection-state-recovery#usage。
为了测试 socket.io 中的连接状态恢复功能,但我很困惑,因为我认为 socket.io 会自动处理 ping pong 发出的信号,所以我认为设置
pingInterval: 1000
将替换示例中使用的这一行:
setInterval(() => {
io.emit("ping", new Date().toISOString());
}, 1000);
但是使用时恢复不起作用:
const io = new Server(server, { // for work with socket.io
cors: corsOptions,
pingInterval: 1000,
connectionStateRecovery: {
maxDisconnectionDuration: 2 * 60 * 1000, // 2 mins backup
skipMiddlewares: true,
},
});
没有 setInterval...
编辑:我发现了一些可能有用的信息
const socket = io(
process.env.REACT_APP_SERVER || "http://localhost:3001",
{
reconnectionDelay: 5000, // defaults to 1000
reconnectionDelayMax: 5000, // defaults to 5000
}
);
socket.on("connect", () => {
console.log(socket.recovered); // true only for setInterval method
});
socket.io.on("ping", () => {
console.log("ping from pingInterval only");
});
socket.on("ping", () => {
console.log("ping from setInterval only");
});
经过进一步检查,似乎文档中的这一行是为什么......“为了成功恢复,服务器必须发送至少一个事件,以便初始化客户端的偏移量。”我认为“ping”是一个特殊事件,但我想任何一个都可以,但这是必需的:
https://stackblitz.com/edit/github-xnkned?file=index.js,index.html