Mercure : la collaboration temps réel sans WebSocket
Une simple annotation et chaque mutation broadcast un patch. Les DataTables et écrans de détail se rafraîchissent seuls.
Le temps réel dans une application web a longtemps signifié : serveur WebSocket dédié, déploiement parallèle, gestion d'état côté client. Mercure remplace tout cela par du HTTP/2 standard : le serveur publie sur des topics, les clients s'abonnent en SSE, et le hub gère le multiplexage.
Sur Jul6art, le pattern est encore plus simple. L'attribut #[BroadcastableEntity(changedFields: ['title', 'status'])] sur une entité Doctrine déclenche, à chaque flush, la publication d'un patch sur un topic privé scope sur l'organisation. Les composants Stimulus côté backoffice écoutent et rafraîchissent :
- Les DataTables auto-refresh la ligne touchée sans recharger toute la page.
- Les écrans de détail affichent un toast « Cet enregistrement vient d'être modifié » et proposent un rechargement.
- La cloche de notifications s'incrémente sans polling.
Le tout sans une seule ligne de glue côté business code. Ajoutez l'attribut, redémarrez Mercure, c'est en place.