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.
16 lines
495 B
Go
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"`
|
|
}
|