Présentation
Igropyr est un serveur Web écrit en Scheme, inspiré par les principes d'Erlang et Node.js. Il utilise un pool de travailleurs supervisés pour gérer les requêtes, ce qui permet une récupération automatique en cas de crash d'un travailleur.
Architecture
Chaque requête est traitée par un travailleur du pool, qui peut crasher sans affecter le système global. Le superviseur est responsable de la gestion des travailleurs et de la reprise des requêtes en cas de crash. Les routes sont stockées dans un registre mutable derrière le pool, ce qui permet de remplacer une route ou un gestionnaire de requête à la volée sans arrêter le serveur.
(app-get app "/crash" (lambda (req res) (raise 'handler-crashed)))
Le serveur utilise également un mécanisme de conversation pour gérer les dialogues multi-requêtes, ce qui permet de maintenir un état de conversation entre les requêtes.
Fonctionnement
Le serveur Igropyr utilise un modèle de processus verts, où chaque processus est une unité de travail indépendante qui peut être créée, suspendue et réactivée. Les processus communiquent entre eux par message passing, ce qui évite les problèmes de partage d'état et de verrous.
(conversation-start! (lambda (req suspend!) ...))
Le serveur prend en charge les mécanismes de retry et de timeout, ce qui permet de gérer les cas de crash ou de blocage des travailleurs. Les clients peuvent recevoir des informations détaillées sur les erreurs et les retards, ce qui leur permet de réessayer les requêtes avec des paramètres différents.
Implications et limites
Igropyr est construit sur Chez Scheme, qui est le compilateur Scheme le plus rapide, avec une interface de programmation étrangère (FFI) de première classe qui permet d'accéder directement à la bibliothèque libuv. Cela permet de bénéficier de performances élevées et d'une grande flexibilité pour la programmation du serveur Web.
Cependant, Igropyr est encore un projet en développement, et certaines fonctionnalités peuvent ne pas être encore complètement testées ou documentées. De plus, la communauté Scheme est moins grande que celles des autres langages de programmation, ce qui peut limiter les ressources disponibles pour les développeurs.