WebSocket et demande de parole

Réalisez une application de demande de parole. Chaque participant pourra demander la parole, consulter la file d'attente et voir les changements en temps réel. Le serveur sera responsable de l'attribution de la parole et de l'ordre des demandes.

Utilisez la bibliothèque WsMini pour les échanges entre le navigateur et le serveur. Les actions seront effectuées par RPC et les mises à jour seront diffusées dans un canal PubSub commun aux participants. Le support Prise en main de WebSocket présente les bases du protocole.

Fonctionnalités

L'application doit permettre de :

Chaque action doit recevoir une confirmation personnelle ou un message d'erreur. Les changements seront transmis par WebSocket pour actualiser les écrans de tous les participants. Lorsqu'un participant ouvre la page, il doit recevoir la situation actuelle puis les mises à jour suivantes.

Lorsqu'un participant se déconnecte, il est retiré de la file. S'il avait la parole, celle-ci passe au suivant. L'interface doit aussi indiquer une perte de connexion et empêcher les actions tant qu'elle n'est pas disponible.

Chaque participant sera identifié par sa connexion WebSocket et les données seront conservées en mémoire sur le serveur. Une actualisation de la page crée un nouveau participant et un redémarrage du serveur remet la situation à zéro.

Mise en place

Utilisez une version récente de Node.js compatible avec WsMini et Vite. Dans un nouveau dossier, initialisez le projet et installez les dépendances :

npm init -y
npm install wsmini
npm install --save-dev vite

Créez un fichier server.mjs pour le serveur et une page index.html chargeant votre JavaScript client avec une balise script de type module. Ajoutez les scripts suivants dans la propriété scripts de package.json :

"scripts": {
  "dev": "vite",
  "server": "node --watch server.mjs"  
}

Lancez npm run server et npm run dev dans deux terminaux distincts. Ouvrez l'adresse HTTP affichée par Vite. Vite fournit les fichiers de la page et le serveur Node.js gère les connexions WebSocket, par exemple sur le port 8888.

Côté serveur, importez WSServerPubSub et WSServerError depuis wsmini. Côté navigateur, importez WSClient depuis le même paquet. Les exemples de WsMini présentent l'initialisation du serveur, la connexion du client et les échanges RPC et PubSub. Développez progressivement les fonctionnalités côté serveur et côté client pour faciliter vos tests.

Indications

Testez avec plusieurs onglets et observez les messages dans les outils réseau du navigateur. Vérifiez notamment les demandes simultanées, les doublons, les annulations, les déconnexions et l'arrivée d'un nouveau participant en cours de discussion.