9 points par GN⁺ 2025-04-30 | 3 commentaires | Partager sur WhatsApp
  • Un site web expérimental proposant un million d’échiquiers que tout le monde peut manipuler en même temps
  • Quand une personne déplace une pièce, le changement est répercuté en temps réel pour tous les utilisateurs, et il est possible de se déplacer librement entre les plateaux, sans tours
  • L’état de tous les échiquiers est stocké dans un tableau mémoire 2D composé de 64 millions de uint64, avec un seul serveur
  • Il s’agit du premier projet écrit en Go, avec une synchronisation assurée par des messages Protobuf compressés avec zstd sur WebSocket
  • Le projet était techniquement ambitieux, au point que la seule implémentation de la logique client en application optimiste + rollback a pris une semaine

One Million Chessboards

  • One Million Chessboards propose un million d’échiquiers, et tout le monde peut y déplacer des pièces simultanément
  • Ce n’est pas basé sur des tours : quand une personne déplace une pièce, le changement est immédiatement répercuté chez tous les utilisateurs
  • Il est aussi possible de se déplacer librement entre les plateaux, pour une expérience sans précédent

Contexte

  • Ce projet expérimental fait suite à One Million Checkboxes, avec l’ambition d’aller vers une plus grande échelle et de nouveaux défis
  • Le créateur y a consacré beaucoup de temps et espère que les utilisateurs s’amuseront avec

Mise en œuvre technique

  • Ce projet a été l’un des travaux les plus exigeants techniquement parmi ses réalisations récentes
  • Aperçu des principaux choix techniques :
    • Conception pensée pour la scalabilité
    • Fonctionnement sur un serveur unique
    • Ensemble des échiquiers stocké en mémoire dans un tableau 2D de uint64 (64 millions de cellules au total)
    • Backend écrit en Go, le premier projet Go du créateur
    • Un seul thread writer + plusieurs threads reader, avec contrôle d’accès par mutex
    • Le client applique des mises à jour optimistes, puis effectue un rollback si une mise à jour conflictuelle arrive depuis le serveur
    • Envoi au client de messages protobuf compressés avec zstd via WebSocket
    • Le client est découpé en zones 50x50 et ne reçoit que les mouvements des zones voisines
    • Les données globales (statistiques, mini-carte, etc.) sont récupérées par polling HTTP GET, avec utilisation du cache Cloudflare

Point clé du fonctionnement côté client

  • Le système d’application optimiste + rollback (optimistic update with rollback) représente environ 1 600 lignes de code et a demandé 7 jours de travail intensif
    > « C’est probablement le problème le plus difficile auquel je me suis attaqué ces derniers temps. »

Réactions après le lancement

  • En seulement 8 heures après le lancement : plus de 1,3 million de déplacements de pièces enregistrés et environ 400 utilisateurs simultanés
  • La charge du serveur reste négligeablement faible

Statistiques actuelles

  • Nombre de joueurs en ligne : 199 276
  • Nombre total de déplacements : 5 238 978
  • Nombre total de pièces : 1 490 061 914
  • Nombre de rois : 9 035 389

3 commentaires

 
roxie 2025-05-03

Et si la taille avait été un peu réduite... la probabilité de tomber sur quelqu’un est vraiment trop faible lol T_T

 
ifmkl 2025-04-30

J’ai testé, et c’est intéressant qu’actuellement, en sortant de la table, on puisse passer à l’échiquier du dessous du point de vue des noirs.

 
GN⁺ 2025-04-30
Commentaires sur Hacker News
  • Bonjour ! C'est moi qui l'ai fait. Désolé, l'explication sur le blog était insuffisante. Si vous avez des questions sur l'architecture, j'y répondrai avec plaisir. Je me suis concentré sur le fait de permettre à ce projet de gérer des milliers de clients simultanés avec un seul processus. Go convenait bien à ce travail

  • Ce jeu est devenu intéressant. Par exemple, des gens ont découvert qu'un plateau unique rempli sur deux cases de profondeur le long du bord extérieur était imprenable. C'est agréable de voir un gameplay émergent. C'est là tout le génie du projet de eieio. En apparence, cela semble simple, mais à grande échelle on découvre des possibilités intéressantes

  • Quelqu'un a bloqué un roi avec environ 40 tours. J'y suis entré avec un cavalier, puis il m'a immédiatement pris avec le roi et a bouché l'ouverture avec une autre tour. C'était amusant

  • Il est possible de se déplacer entre les plateaux, mais pas de capturer. Ce qui est étrange, ce n'est pas que le déplacement ne soit pas projeté. Par exemple, les lignes bleues de la dame pointent correctement au-delà des limites du plateau, mais elles s'arrêtent sur toutes les pièces des autres plateaux. Beau travail comme exercice de passage à l'échelle

  • J'ai eu une erreur. Uncaught TypeError: impossible de lire les propriétés de null

  • Je pensais que chaque plateau aurait un « tour ». Je ne pensais pas pouvoir choisir un plateau au hasard, libérer la dame noire et nettoyer toutes les pièces blanches pendant que l'adversaire ne pouvait rien faire

  • Il y a un tricheur qui joue avec l'autre couleur. J'ai cru l'avoir vu hier, mais aujourd'hui je l'ai vu à coup sûr. On dirait que c'était utilisé par vengeance. Dès qu'une forteresse noire a été détruite, les pièces de la forteresse blanche la plus proche se sont déplacées vers les pires positions possibles

  • Je prédis que cela va évoluer en guerre de bots. Par exemple, voici un bout de code qui fait avancer les pions

  • C'est très amusant de courir après les gens. Même indépendamment des échecs, c'est divertissant

  • Ça fonctionne bien avec Firefox sur un téléphone Android. Bien joué