Microservice Socket.IO du temps réel de workyt.fr : forum live, présence par fil, indicateurs « en train d'écrire », compteurs live.
Séparé du site Next.js (build standalone) afin que chaque partie soit déployée
et scalée indépendamment. Le site reste fonctionnel sans ce service (le temps
réel devient silencieusement inactif).
Navigateur ──/socket.io (websocket)──> reverse proxy ──> workyt-socket (ce repo)
Routes API Next ──POST /internal/emit (HTTP + secret)──> workyt-socket
Dashboard admin ──/api/admin/realtime-metrics──> Next ──GET /internal/stats──> workyt-socket
cp .env.example .env # renseigner JWT_SECRET + REALTIME_INTERNAL_SECRET
npm install
npm start # écoute sur PORT (défaut 3001)Test de bout en bout (connexion ws + emit interne) :
npm run test:e2e| Route | Auth | Description |
|---|---|---|
GET /health |
— | Santé du service ({ ok, connections }) |
POST /internal/emit |
x-internal-secret |
Body { room | rooms, event, payload } → broadcast aux rooms |
GET /internal/stats |
x-internal-secret |
Compteurs sockets, event-loop lag, mémoire, uptime |
Le path Socket.IO est /socket.io, transport websocket uniquement (pas de
long-polling) : le reverse proxy doit transmettre les en-têtes Upgrade /
Connection (HTTP/1.1).
Voir .env.example. Les secrets JWT_SECRET et
REALTIME_INTERNAL_SECRET doivent être identiques côté app Next.
REALTIME_SERVICE_URL: URL interne de ce microservice (ex.http://127.0.0.1:3001)NEXT_PUBLIC_SOCKET_URL: URL navigateur, uniquement si pas de routage same-originworkyt.fr/socket.io
Voir docs/deploiement-pterodactyl.md dans le repo workyt-next. L'egg lance
simplement node socket-server.mjs (aucun build nécessaire).