You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关闭闲置的Socket.IO连接?是否需客户端自行追踪?(v4.4.1)

Socket.IO 4.4.1 闲置连接关闭方案

不用客户端自行追踪,服务端直接就能配置关闭闲置连接,主要有两种实用方式:

1. 利用内置心跳机制自动断开

Socket.IO 4.4.1 自带 ping/pong 心跳检测机制,通过配置两个核心参数,就能让服务端自动断开长时间无响应的闲置连接:

  • pingInterval:服务端主动发送 ping 包的间隔(单位:毫秒),默认值 25000
  • pingTimeout:服务端发送 ping 包后,超过该时长未收到客户端 pong 响应,就会触发断开逻辑(单位:毫秒),默认值 5000

示例代码(Node.js 服务端):

const { Server } = require("socket.io");
const io = new Server({
  pingInterval: 30000, // 每30秒发送一次ping包
  pingTimeout: 10000   // 10秒未收到pong就断开连接
});

2. 自定义闲置检测逻辑

如果需要更灵活的闲置判断规则(比如根据特定业务事件判定是否闲置),可以在服务端手动实现定时器逻辑:

  • 客户端每次发送事件时,重置闲置定时器
  • 超时后主动调用 socket.disconnect() 断开连接

示例代码:

io.on("connection", (socket) => {
  let idleTimer;

  // 重置闲置定时器的工具函数
  const resetIdleTimer = () => {
    clearTimeout(idleTimer);
    // 设置10分钟无事件触发就断开连接
    idleTimer = setTimeout(() => {
      socket.disconnect(true);
    }, 600000);
  };

  // 监听客户端所有事件,触发时重置定时器
  socket.onAny(resetIdleTimer);

  // 连接建立时初始化定时器
  resetIdleTimer();

  // 连接断开时清理定时器,避免内存泄漏
  socket.on("disconnect", () => {
    clearTimeout(idleTimer);
  });
});

客户端也可以主动在闲置状态下调用 socket.disconnect(),但服务端控制的方式更可靠,能有效避免客户端异常退出导致的无效连接残留。

内容的提问来源于stack exchange,提问作者Sanjay Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:10:33