feat(ws): implement WebSocket cluster mode with Redis Pub/Sub
Introduce a new WebSocket messaging architecture that supports both standalone and cluster modes. This allows for horizontal scaling of WebSocket servers by using Redis Pub/Sub to synchronize messages across multiple instances. Key changes: - Added `ws.MessagePublisher` interface to abstract message distribution. - Implemented `ws.Bus` to handle cluster-mode messaging via Redis. - Added `ws.OnlineTracker` to manage user online status across the cluster. - Refactored multiple services (Chat, Group, Push, Call, etc.) to use the new `MessagePublisher` instead of a concrete `ws.Hub`. - Added WebSocket configuration options (mode, instance ID, channel, TTL, heartbeat) to `config.yaml` and `config.go`. - Updated dependency injection with Wire to support the new publisher and Redis client. - Improved logging by replacing standard `log` with `zap` in several service components.
This commit is contained in:
@@ -277,3 +277,16 @@ jpush:
|
||||
# 设置后可使用 POST /api/v1/admin/setup-super-admin 接口初始化第一位超级管理员
|
||||
# 该接口只能使用一次,一旦系统中存在超级管理员,此接口将永久拒绝请求
|
||||
setup_secret: ""
|
||||
|
||||
# WebSocket 配置
|
||||
# 环境变量:
|
||||
# APP_WEBSOCKET_MODE, APP_WEBSOCKET_CLUSTER_INSTANCE_ID
|
||||
# APP_WEBSOCKET_CLUSTER_MSG_CHANNEL, APP_WEBSOCKET_CLUSTER_ONLINE_TTL
|
||||
# APP_WEBSOCKET_CLUSTER_HEARTBEAT_INTERVAL
|
||||
websocket:
|
||||
mode: standalone # standalone 或 cluster
|
||||
cluster:
|
||||
instance_id: "" # 留空自动生成 UUID
|
||||
msg_channel: "ws:msg" # Redis Pub/Sub 频道
|
||||
online_ttl: 60 # 在线状态 TTL(秒)
|
||||
heartbeat_interval: 20 # 心跳间隔(秒)
|
||||
|
||||
Reference in New Issue
Block a user