Description
Actuellement, tous les messages WebSocket sont envoyés à tous les clients connectés (admin, TV, VJoueur) sans distinction. Cette amélioration ajoute un filtrage intelligent pour n'envoyer que les messages pertinents à chaque type de client.
📄 Spécification complète : backlog/TODO/websocket-broadcast-filtre.md
Problème actuel
| Message |
Admin |
TV |
VJoueur |
Actuellement |
| UPDATE |
✅ |
✅ |
✅ |
Tous ✅ |
| QUESTIONS |
✅ |
❌ |
❌ |
Tous ❌ |
| CLIENTS |
✅ |
❌ |
❌ |
Tous ❌ |
| BACKGROUND_CHANGE |
❌ |
✅ |
✅ |
Tous ❌ |
| ENROLLMENT_UPDATE |
✅ |
✅ |
❌ |
Tous ❌ |
Les clients reçoivent des messages inutiles → bande passante gaspillée.
Phase 1 - Backend
Phase 2 - Frontend
Phase 3 - Tests
Fichiers concernés
| Fichier |
Modification |
internal/server/websocket.go |
Ajouter ClientType, modifier WSClient |
cmd/server/main.go |
broadcastFiltered(), mise à jour des appels |
web/src/pages/VPlayerPage.jsx |
Envoyer SET_CLIENT_TYPE: "player" |
Avantages
- Réduction du trafic WebSocket inutile
- Code plus explicite (on sait qui reçoit quoi)
- Préparation pour restrictions de sécurité
- Pas de refactoring majeur (amélioration incrémentale)
Description
Actuellement, tous les messages WebSocket sont envoyés à tous les clients connectés (admin, TV, VJoueur) sans distinction. Cette amélioration ajoute un filtrage intelligent pour n'envoyer que les messages pertinents à chaque type de client.
📄 Spécification complète :
backlog/TODO/websocket-broadcast-filtre.mdProblème actuel
Les clients reçoivent des messages inutiles → bande passante gaspillée.
Phase 1 - Backend
ClientTypedansinternal/server/websocket.goWSClientpour inclure le typeSET_CLIENT_TYPEpour définir le typebroadcastFiltered(msg, targets...)dansmain.gobroadcast()parbroadcastFiltered()avec les bons filtresPhase 2 - Frontend
ClientPlayerpour les VJoueursSET_CLIENT_TYPEdepuis VPlayerPagePhase 3 - Tests
Fichiers concernés
internal/server/websocket.goClientType, modifierWSClientcmd/server/main.gobroadcastFiltered(), mise à jour des appelsweb/src/pages/VPlayerPage.jsxSET_CLIENT_TYPE: "player"Avantages