Redbean 2.0 est une plateforme pour applications Web regroupées dans une archive ZIP exécutable universelle

La version du projet Redbean 2.0 est présentée, proposant un serveur Web qui permet de fournir des applications Web sous la forme d'un fichier exécutable universel pouvant être exécuté sous Linux, Windows, MacOS, FreeBSD, NetBSD et OpenBSD. Toutes les ressources associées à l'application Web et au serveur sont compilées dans un seul fichier exécutable, compatible avec le format d'archive ZIP et vous permet d'utiliser l'utilitaire zip pour ajouter des fichiers supplémentaires. La possibilité d'exécuter un fichier sur différents systèmes d'exploitation et de le faire reconnaître comme une archive ZIP est obtenue en manipulant les en-têtes de fichiers exécutables et en établissant une liaison avec la bibliothèque C standard multiplateforme Cosmopolitan. Le code du projet est distribué sous la licence ISC.

L'idée du projet est de fournir un fichier exécutable « redbean.com » avec un serveur Web intégré. Un développeur d'applications Web peut utiliser l'utilitaire zip pour ajouter des fichiers HTML et Lua à ce fichier et obtenir une application Web autonome qui s'exécute sur tous les systèmes d'exploitation courants et ne nécessite pas de serveur Web distinct pour s'exécuter sur le système.

Après avoir lancé le fichier exécutable résultant, le serveur Web intégré est utilisé pour accéder à l'application Web enregistrée dans le fichier. Par défaut, le gestionnaire est attaché à localhost, mais le serveur peut également être utilisé comme serveur Web public classique (par exemple, ce serveur dessert le site Web du projet). Le serveur Web intégré prend en charge l'accès HTTPS et peut être exécuté à l'aide de l'isolation sandbox, ce qui vous permet de contrôler les interfaces système accessibles. Pour contrôler le fonctionnement du serveur lors de son exécution, une interface REPL interactive est fournie (basée sur Lua REPL et la bibliothèque bestline, analogue de GNU Readline), qui permet de changer l'état du processus de manière interactive.

On prétend que le serveur Web est capable de traiter plus d'un million de requêtes par seconde sur un PC ordinaire, diffusant du contenu compressé au format gzip. Ce qui améliore les performances, c'est que zip et gzip utilisent un format commun, de sorte que les données sont servies sans être reconditionnées à partir de zones déjà compressées dans le fichier zip. De plus, étant donné que l'exécutable est créé à l'aide d'une liaison statique et qu'il est de petite taille, l'appel de fork dessus introduit peu ou pas de surcharge de mémoire.

En plus du traitement du contenu Web statique et de l'exécution de JavaScript dans le navigateur, la logique de l'application Web peut être étendue à l'aide de scripts dans Lua, le framework Web Fullmoon et le SGBD SQLite. Les fonctionnalités supplémentaires incluent la prise en charge du schéma de hachage de mot de passe argon2, la possibilité de déterminer la région IP à l'aide de la base de données MaxMind et l'accès à l'API Unix de la bibliothèque Cosmopolitan. La taille de la pile de base, qui comprend un serveur web, MbedTLS, Cosmopolitan, Lua et SQLite, n'est que de 1.9 Mo.

Un fichier exécutable universel est formé en combinant des segments et des en-têtes spécifiques à différents systèmes d'exploitation (PE, ELF, MACHO, OPENBSD, ZIP) dans un seul fichier. Pour garantir qu'un seul fichier exécutable s'exécute sur les systèmes Windows et Unix, une astuce consiste à encoder les fichiers Windows PE en tant que script shell, en profitant du fait que Thompson Shell n'utilise pas le marqueur de script « # ! ». Le résultat est un fichier exécutable qui combine plusieurs formats différents utilisés sous Linux, BSD, Windows et macOS. $ curl https://redbean.dev/redbean-demo-2.0.7.com >redbean.com $ chmod +x redbean.com $ zip redbean.com bonjour.html $ zip redbean.com bonjour.lua $ ./redbean .com -vv I2022-06-23T08:27:14+000767:redbean] (srvr) écouter http://127.0.0.1:8080 > : en attente de commande… $ curl https://127.0.0.1:8080/hello .html bonjour $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 bonjour



Source: opennet.ru

Ajouter un commentaire