SuperAPI AI 工具集

golang-websocket

编程与开发

查看项目

更新于 10-15 20:31

技能介绍

用途:在 Go 服务中实现 WebSocket 实时推送,适用于需要服务端主动推送的领域;简单 CRUD 仍建议用 HTTP。

主要能力:用 Gin 提供 HTTP→WS 升级路由,gorilla/websocket 管理 Conn、Upgrader 与控制帧;Hub 负责客户端注册、广播与注销;每条连接用独立 goroutine 运行读/写泵。

使用方式:升级前先鉴权(cookie/token/query),失败返回 401;Upgrader 需显式设置 CheckOrigin,生产环境不可无条件返回 true。升级后不要再写 gin.Context 响应。每连接只允许一个 writer,读泵负责读取、处理与转发,退出时注销并关闭;写泵从带缓冲 channel 取数据写出,定时发送 Ping,并设置读写 deadline 与 ReadLimit。协议消息建议使用带 type 的版本化 JSON,服务端按频道/房间做授权,并限制大小与速率。

关闭:停止接受新升级,Hub 广播关闭或取消 context,逐个关闭 send、刷新写泵并 Conn.Close,用 WaitGroup/errgroup 等待连接归零并设全局超时。

限制与注意:gorilla 不支持并发写同一 Conn;send channel 必须有界并定义丢弃或断开策略;忽略 ping/pong 会产生僵尸连接;多实例部署时进程内 Hub 不够,需借助 Redis 等 pub/sub。资料未提供具体安装命令、版本要求与完整代码示例。