用途:为 Go 服务端与 TypeScript 客户端提供 WebSocket 实时双向通信的实现模式,核心是 Hub 模式,用于构建实时仪表盘、聊天或通知系统、传感器数据流推送,以及替代轮询的主动更新。
主要能力:Go 侧使用 gorilla/websocket 或 nhooyr.io/websocket,Hub 维护全局客户端、按租户(byTenant)与按房间(byRoom)的索引,通过 register、unregister、broadcast 通道处理注册、注销与广播;支持 JoinRoom、BroadcastToRoom 定向推送;客户端含 readPump/writePump,设置读写超时、ping/pong 心跳、最大消息 512KB,并在写入时合并队列消息。TypeScript 侧使用原生 WebSocket API,提供 useWebSocket Hook(连接、发送、subscribe/unsubscribe、断线重连),可与 @tanstack/react-query 缓存同步,并给出指数退避重连与心跳检测实现。Rust 侧提及 tokio-tungstenite。
使用方式:服务端创建 hub := NewHub(),go hub.Run(ctx) 启动循环,HTTP 升级用 upgrader.Upgrade(w, r, nil),加入房间用 hub.JoinRoom(client, "room"),广播用 hub.BroadcastToRoom("room", "type", data)。客户端 new WebSocket(url) 连接,ws.send(JSON.stringify(msg)) 发送,send('subscribe', { room }) 订阅,ws.close() 关闭。消息协议为 JSON,含 subscribe、unsubscribe、ping/pong 与数据消息类型。
适用场景:实时仪表盘、聊天与通知、传感器数据流、需要按房间或租户定向推送的实时应用。
限制:资料未提供具体安装命令、版本兼容细节、性能基准与部署要求;CheckOrigin 示例仅允许指定来源,实际需按环境调整;示例代码需结合自身鉴权与上下文使用。