mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-19 13:23:37 +02:00
feat(mana-sync): unified WebSocket — one connection per user instead of 27
Add unified /ws endpoint that serves all app notifications over a single connection.
The server now includes appId in the sync-available message payload so the client
knows which app to pull. Legacy /ws/{appId} endpoint remains for backward compatibility.
Backend (Go):
- hub.go: Message struct gains AppId field, NotifyUser sends to all user clients
(unified clients receive everything, legacy clients filtered by appId)
- main.go: new GET /ws route (empty appId = unified mode)
Frontend (sync.ts):
- Single connectUnifiedWs() replaces 27 per-app connectWs() calls
- Parses msg.appId from server to pull only the affected app
- Reconnect/offline logic simplified to one WS
This reduces WebSocket connections from 27 per user to 1, cutting server
connection overhead by ~96%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
df7395e57a
commit
ee831992de
4 changed files with 64 additions and 39 deletions
|
|
@ -59,7 +59,12 @@ func main() {
|
|||
mux.HandleFunc("POST /sync/{appId}", handler.HandleSync)
|
||||
mux.HandleFunc("GET /sync/{appId}/pull", handler.HandlePull)
|
||||
|
||||
// WebSocket endpoint
|
||||
// WebSocket endpoints
|
||||
// Unified: one connection per user, receives all app notifications with appId in payload
|
||||
mux.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
|
||||
hub.HandleWebSocket(w, r, "") // empty appID = unified mode
|
||||
})
|
||||
// Legacy: one connection per app (backward-compatible)
|
||||
mux.HandleFunc("/ws/{appId}", func(w http.ResponseWriter, r *http.Request) {
|
||||
appID := r.PathValue("appId")
|
||||
hub.HandleWebSocket(w, r, appID)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue