feat(server): WebSocket 广播支持 Redis Pub/Sub 跨节点扇出(REDIS_ADDR 可选开关)
- 新增 ws.EventBus 接口与 RedisBus 实现;Hub 五类广播改为发布信封、各节点订阅后本地投递 - 单实例不设 REDIS_ADDR 保持进程内直投;Redis 不可用时自动兜底本地投递 - config 新增 REDIS_ADDR/REDIS_PASSWORD/REDIS_DB;dev compose 增加 --profile redis (6380) - prod compose 与 .env.prod.example 增加多副本配置说明;README 更新已知边界 - 已用双实例 + 真实 Redis 实测跨节点推送;新增总线单测(含发布失败兜底),-race 通过
This commit is contained in:
@@ -40,6 +40,13 @@ func main() {
|
||||
|
||||
// 启动 WebSocket Hub
|
||||
ws.SetAllowedOrigins(cfg.AllowedOrigins)
|
||||
// 多 API 副本部署时通过 REDIS_ADDR 启用跨节点广播;单实例保持进程内投递
|
||||
if cfg.Redis.Addr != "" {
|
||||
bus := ws.NewRedisBus(cfg.Redis.Addr, cfg.Redis.Password, cfg.Redis.DB)
|
||||
ws.DefaultHub.SetEventBus(bus)
|
||||
log.Printf("WebSocket 跨节点广播已启用: redis=%s db=%d", cfg.Redis.Addr, cfg.Redis.DB)
|
||||
defer func() { _ = bus.Close() }()
|
||||
}
|
||||
go ws.DefaultHub.Run()
|
||||
|
||||
// 设置 Gin 模式
|
||||
|
||||
Reference in New Issue
Block a user