7 points par GN⁺ 2023-10-19 | 1 commentaires | Partager sur WhatsApp
  • Reflect est un nouveau framework pour créer des applications web multijoueurs similaires à Figma, Notion ou Google Sheets.
  • Il s’agit d’une version évoluée de Replicache, un framework de synchronisation côté client, à laquelle a été ajouté un serveur entièrement managé afin de faciliter davantage le développement d’applications multijoueurs.
  • Reflect est désormais disponible publiquement pour la première fois.
  • Ce framework traite le problème de la résolution des conflits dans l’édition collaborative, afin que tous les utilisateurs voient le même contenu et que les conflits se résolvent naturellement.
  • Contrairement aux outils populaires de l’écosystème web comme les CRDTs (Conflict-Free Replicated Data Types), Reflect utilise une technique de résolution transactionnelle des conflits, populaire dans l’industrie du jeu vidéo.
  • Les avantages et différences propres à Reflect découlent de ce choix fondamental au cœur de son moteur de synchronisation.
  • Reflect utilise des fonctions JavaScript appelées mutators pour implémenter les changements, et génère des mutation records qui enregistrent l’appel de ces mutators.
  • Les mutations sont appliquées localement puis transmises en continu au serveur, lequel les linéarise selon leur heure d’arrivée afin de produire l’état autoritatif suivant.
  • Reflect peut gérer des applications très dynamiques et ajouter des mutations pendant qu’il attend la confirmation des précédentes.
  • Ce framework nécessite un stockage de données rapide capable de rembobiner, de forker et de créer des branches, ainsi qu’un stockage rapide côté serveur capable de suivre les mutations entrantes.
  • L’approche de Reflect se généralise bien et convient à de nombreuses opérations, comme l’arithmétique, les opérations sur listes ou encore l’application d’invariants de haut niveau.
  • Le serveur de Reflect fait autorité : il recalcule lui-même le résultat des mutations, et tous les clients peuvent en voir le résultat.
  • Cette autorité côté serveur permet une authentification fine ainsi que l’exécution d’autres types de code sur le serveur.
  • Reflect apporte également des avantages comme la validation de schéma et les migrations.
  • La stratégie de synchronisation de Reflect, la résolution transactionnelle des conflits, est simple, flexible et puissante, ce qui en fait un bon choix pour créer des applications multijoueurs.

1 commentaires

 
GN⁺ 2023-10-19
Avis sur Hacker News
  • Cet article discute de Reflect, un framework d’applications web multijoueurs avec une synchronisation de style jeu.
  • La démo de Reflect sur la page d’accueil est interactive et semble montrer des utilisateurs enthousiastes à l’idée d’accomplir des tâches, ce qui est très intéressant.
  • Reflect n’est pas open source, ce qui peut limiter son adoption dans les entreprises qui privilégient les logiciels open source pour leur infrastructure essentielle.
  • Reflect était auparavant connu sous le nom de Replicache et inclut désormais un serveur de synchronisation rapide.
  • Ce framework permet aux utilisateurs de décider comment gérer les conflits avec un code simple et séquentiel, ce qui est considéré comme un avantage par rapport aux CRDT.
  • Son modèle de données et son modèle de programmation sont salués pour leur simplicité.
  • Une discussion porte sur les difficultés d’implémentation des opérations sur les listes dans Reflect, en particulier dans les scénarios où plusieurs utilisateurs effectuent des mises à jour simultanées.
  • Un utilisateur souligne la terminologie confuse employée dans Reflect et propose « multi-utilisateur » plutôt que « multijoueur » pour les logiciels non liés au jeu.
  • Une question est posée sur la manière dont Reflect gère l’authentification, étant donné que les bibliothèques CRDT manquent souvent d’une autorité centrale pour valider les mutations.
  • La stratégie de Reflect est comparée à la « synchronisation déterministe » utilisée dans le développement de jeux pour synchroniser l’état de nombreuses entités.
  • Des questions sont soulevées sur la façon dont Reflect gère les mises à niveau des mutators et les incohérences potentielles entre les opérations côté client et côté serveur.
  • Un utilisateur estime qu’un protocole UDP dans le navigateur serait nécessaire pour gérer la messagerie à haute fréquence dans un moteur multijoueur, et critique la surcharge de TCP et des WebSockets.