You need to enable JavaScript to run this app. JS客户端连接Gin集成的go-socket.io服务端出现反复重连问题
优惠活动
大模型
产品
解决方案
定价
更多

JS客户端连接Gin集成的go-socket.io服务端出现反复重连问题

问题根因

你遇到的反复重连问题,核心是Socket.IO服务端与客户端版本不兼容,再加上心跳配置、跨域中间件的小问题共同导致的:
googollee维护的go-socket.io v1.x版本,仅兼容Socket.IO JS客户端v2.x版本,你当前使用的客户端版本过低,版本协议不匹配会导致握手成功后心跳校验失败,服务端主动断开连接,客户端触发自动重连逻辑,就出现了循环连接断开的现象。

解决方案

你可以按以下步骤依次修改:

  1. 对齐客户端版本
    将HTML中Socket.IO客户端的版本替换为v2.x系列(比如v2.4.1),和服务端go-socket.io v1.x版本兼容即可。
  2. 对齐心跳配置
    初始化Socket.IO服务端时,显式配置心跳参数,和客户端参数匹配:
import "time" // 新增导入

// 替换原来的server初始化代码
server := socketio.NewServer(&socketio.ServerConfig{
    PingTimeout:  time.Second * 60,
    PingInterval: time.Second * 25,
})
  1. 修复跨域中间件问题
    删除Gin跨域中间件中手动删除Origin头的代码,go-socket.io内部会基于Origin头做跨域校验,手动删除会导致校验异常:
// 删掉这行代码即可
c.Request.Header.Del("Origin")
  1. 修复客户端语法错误
    删除JS代码中多余的斜杠,避免语法报错:
// 原来的代码末尾多了个/,修改为
socket.emit('my new event', { my:'new data' });

修改完成后重启服务,即可解决反复重连的问题。


内容的提问来源于stack exchange,提问作者Allan Ruin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 07:15:04