Files
backend/internal/config/websocket.go
lan c630cbf4d0
All checks were successful
Build Backend / build (push) Successful in 2m0s
Build Backend / build-docker (push) Successful in 1m26s
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.
2026-05-06 12:39:11 +08:00

16 lines
495 B
Go

package config
// WSConfig WebSocket 配置
type WSConfig struct {
Mode string `mapstructure:"mode"` // standalone | cluster
Cluster WSClusterConfig `mapstructure:"cluster"`
}
// WSClusterConfig WebSocket 集群配置
type WSClusterConfig struct {
InstanceID string `mapstructure:"instance_id"`
MsgChannel string `mapstructure:"msg_channel"`
OnlineTTL int `mapstructure:"online_ttl"`
HeartbeatInterval int `mapstructure:"heartbeat_interval"`
}