Redbean 2.0 — een platform voor webapplicaties, verpakt in een universele uitvoerbare ZIP-archief

De release van het Redbean 2.0-project is aangekondigd, dat een webserver biedt waarmee webapplicaties kunnen worden geleverd in de vorm van een universeel uitvoerbaar bestand, dat kan worden uitgevoerd op Linux, Windows, MacOS, FreeBSD, NetBSD en OpenBSD. Alle resources die verband houden met de webapplicatie en server worden samengevoegd in één uitvoerbaar bestand, dat compatibel is met ZIP-archieven en de zip-tool toelaat om extra bestanden toe te voegen. De mogelijkheid om één bestand op verschillende besturingssystemen uit te voeren en het als een ZIP-archief te herkennen, wordt bereikt door manipulatie van de headers van de uitvoerbare bestanden en de koppeling met de multi-platform standaard C-bibliotheek Cosmopolitan. De code van het project wordt verspreid onder de ISC-licentie.

Het idee van het project is om één uitvoerbaar bestand "redbean.com" te leveren met een ingebouwde webserver. De ontwikkelaar van de webapplicatie kan met behulp van de zip-tool HTML- en Lua-bestanden aan dit bestand toevoegen en zo een zelfvoorzienende webapplicatie creëren die op alle populaire besturingssystemen draait en geen aparte webserver in het systeem vereist om te functioneren.

Na het starten van het verkregen uitvoerbare bestand, wordt de ingebouwde webserver gebruikt voor toegang tot de in het bestand opgeslagen webapplicatie. Standaard is de handler aan localhost gekoppeld, maar de server kan ook fungeren als een gewone publieke webserver (bijvoorbeeld, deze server beheert de website van het project). De ingebouwde webserver ondersteunt toegang via HTTPS en kan worden uitgevoerd met behulp van sandbox-isolatie, waardoor gecontroleerd kan worden naar welke systeeminterfaces toegang wordt verkregen. Voor het beheren van de server tijdens zijn uitvoering is er een interactieve REPL-interface (gebaseerd op Lua REPL en de bestline-bibliotheek, een alternatief voor GNU Readline) die de mogelijkheid biedt om de status van het proces in interactief-modus te wijzigen.

Er wordt beweerd dat de webserver in staat is om meer dan een miljoen verzoeken per seconde op een gewone pc te verwerken, waarbij content wordt geleverd die is gecomprimeerd met de gzip-methode. De hoge prestaties worden ondersteund doordat zip en gzip een gemeenschappelijk formaat gebruiken, waardoor gegevens zonder herverpakking kunnen worden geleverd vanuit al gecomprimeerde gebieden in het zip-bestand. Bovendien, omdat het uitvoerbare bestand is gemaakt met behulp van statische koppeling en een klein formaat heeft, heeft het aanroepen van de fork-functie vrijwel geen overhead bij het plaatsen in het geheugen.

Naast het verwerken van statische webinhoud en het uitvoeren van JavaScript in de browser, kan de logica van de webapplicatie worden uitgebreid met scripts in de programmeertaal Lua, het webframework Fullmoon en de database SQLite. Onder de extra mogelijkheden wordt ondersteuning voor het argon2-wachtwoordhashschema, de mogelijkheid om de IP-regio te bepalen op basis van de MaxMind-database en toegang tot de Unix API-bibliotheek Cosmopolitan opgemerkt. De grootte van de basisstapel, inclusief de webserver, MbedTLS, Cosmopolitan, Lua en SQLite, bedraagt slechts 1,9 MB.

Een universeel uitvoerbaar bestand wordt gevormd door segmenten en headers die specifiek zijn voor verschillende besturingssystemen (PE, ELF, MACHO, OPENBSD, ZIP) in één bestand te combineren. Om een enkel uitvoerbaar bestand in Windows en Unix-systemen te laten draaien, wordt een truc toegepast waarbij Windows PE-bestanden worden gecodeerd als een shell-script, gebruikmakend van het feit dat Thompson Shell geen scriptmarker ‘#!’ gebruikt. Hierdoor ontstaat een uitvoerbaar bestand waarin verschillende formaten zijn gecombineerd die worden gebruikt in Linux, BSD, Windows en macOS. $ curl https://redbean.dev/redbean-demo-2.0.7.com >redbean.com $ chmod +x redbean.com $ zip redbean.com hello.html $ zip redbean.com hello.lua $ ./redbean.com -vv I2022-06-23T08:27:14+000767:redbean] (srvr) luister http://127.0.0.1:8080 >: wacht op opdracht… $ curl https://127.0.0.1:8080/hello.html hello $ printf ‘GET /hello.lua\n\n’ | nc 127.0.0.1 8080 hello



Bron: opennet.ru
Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster