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:
@@ -121,7 +121,12 @@ jobs:
|
||||
-e APP_JPUSH_PRODUCTION=true \
|
||||
-e APP_SENSITIVE_ENABLED=true \
|
||||
-e APP_REPORT_AUTO_HIDE_THRESHOLD=3 \
|
||||
-e "APP_SETUP_SECRET=${{ secrets.SETUP_SECRET }}" \
|
||||
-e APP_WEBSOCKET_MODE=standalone \
|
||||
-e APP_WEBSOCKET_CLUSTER_INSTANCE_ID= \
|
||||
-e APP_WEBSOCKET_CLUSTER_MSG_CHANNEL=ws:msg \
|
||||
-e APP_WEBSOCKET_CLUSTER_ONLINE_TTL=60 \
|
||||
-e APP_WEBSOCKET_CLUSTER_HEARTBEAT_INTERVAL=20 \
|
||||
-e "APP_SETUP_SECRET=${{ secrets.SETUP_SECRET }}" \
|
||||
${IMAGE}
|
||||
|
||||
echo "=== Waiting for startup ==="
|
||||
|
||||
Reference in New Issue
Block a user