pingInterval 无法在 socket.io 中为我进行恢复

问题描述 投票:0回答:1

我正在关注这些文档:https://socket.io/docs/v4/connection-state-recovery#usage

给出的示例:https://codesandbox.io/p/sandbox/github/socketio/socket.io/tree/main/examples/connection-state-recovery-example/esm?file=index.js

为了测试 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");
});
node.js sockets socket.io
1个回答
0
投票

经过进一步检查,似乎文档中的这一行是为什么......“为了成功恢复,服务器必须发送至少一个事件,以便初始化客户端的偏移量。”我认为“ping”是一个特殊事件,但我想任何一个都可以,但这是必需的:

https://stackblitz.com/edit/github-xnkned?file=index.js,index.html

© www.soinside.com 2019 - 2024. All rights reserved.