Redbean 2.0 – eine Plattform für Webanwendungen, verpackt in einer universellen ausführbaren ZIP-Datei

Die Version 2.0 des Projekts Redbean wurde vorgestellt. Sie bietet einen Webserver, der es ermöglicht, Webanwendungen in Form einer universellen ausführbaren Datei bereitzustellen, die auf Linux, Windows, MacOS, FreeBSD, NetBSD und OpenBSD ausgeführt werden kann. Alle Ressourcen, die mit der Webanwendung und dem Server verbunden sind, werden in einer einzigen ausführbaren Datei gebündelt, die mit dem ZIP-Archivformat kompatibel ist und die Nutzung des zip-Programms zum Hinzufügen zusätzlicher Dateien ermöglicht. Die Möglichkeit, eine Datei in verschiedenen Betriebssystemen auszuführen und sie als ZIP-Archiv zu erkennen, wird durch Manipulationen an den Headern der ausführbaren Dateien und die Anbindung an die plattformübergreifende Standard-C-Bibliothek Cosmopolitan erreicht. Der Code des Projekts wird unter der ISC-Lizenz veröffentlicht.

Die Idee des Projekts besteht darin, eine ausführbare Datei „redbean.com“ mit einem integrierten Webserver bereitzustellen. Entwickler von Webanwendungen können mithilfe des zip-Tools HTML- und Lua-Dateien in diese Datei hinzufügen und damit eine selbständige Webanwendung erhalten, die auf allen gängigen Betriebssystemen läuft und kein separates Webserver-Setup im System erforderlich macht.

Nach dem Start der erhaltenen ausführbaren Datei wird ein integrierter Webserver verwendet, um auf die im Datei gespeicherte Webanwendung zuzugreifen. Standardmäßig ist der Handler an localhost gebunden, der Server kann jedoch auch als regulärer öffentlicher Webserver fungieren (zum Beispiel bedient dieser Server die Projektwebsite). Der integrierte Webserver unterstützt HTTPS und kann unter Verwendung einer Sandbox-Isolation ausgeführt werden, die es ermöglicht, zu steuern, auf welche Systemschnittstellen zugegriffen wird. Während der Ausführung des Servers steht eine interaktive REPL-Schnittstelle (basierend auf Lua REPL und der Bibliothek bestline, einem Pendant zu GNU Readline) zur Verfügung, die es ermöglicht, den Zustand des Prozesses interaktiv zu ändern.

Es wird behauptet, dass der Webserver in der Lage ist, über eine Million Anfragen pro Sekunde auf einem normalen PC zu verarbeiten und dabei Inhalte auszuliefern, die mit gzip komprimiert sind. Die hohe Leistungsfähigkeit resultiert daraus, dass zip und gzip ein gemeinsames Format verwenden, weswegen die Daten ohne weitere Rekompression aus bereits komprimierten Bereichen in der Zip-Datei bereitgestellt werden. Zudem ist die ausführbare Datei mit statischer Bindung erstellt und hat eine geringe Größe, wodurch der Aufruf der Fork-Funktion bei der Speicherung im Speicher nahezu keine Overhead-Kosten verursacht.

Neben der Verarbeitung von statischen Web-Inhalten und der Ausführung von JavaScript im Browser kann die Logik von Web-Anwendungen durch Skripte in der Programmiersprache Lua sowie das Web-Framework Fullmoon und die SQLite-Datenbank erweitert werden. Zu den Zusatzfunktionen gehören die Unterstützung des Argon2-Passwort-Hashing-Schemas, die Möglichkeit zur IP-Geolokalisierung basierend auf der MaxMind-Datenbank und der Zugang zu Unix-API-Bibliotheken von Cosmopolitan. Die Größe des Basis-Stacks, der den Webserver, MbedTLS, Cosmopolitan, Lua und SQLite umfasst, beträgt nur 1,9 MB.

Eine universelle ausführbare Datei wird erstellt, indem system spezifische Segmente und Header (PE, ELF, MACHO, OPENBSD, ZIP) in einer Datei kombiniert werden. Um eine ausführbare Datei sowohl unter Windows als auch in Unix-Systemen auszuführen, wird ein Trick angewendet, bei dem Windows PE-Dateien als Shell-Skripte codiert werden, da die Thompson Shell das Skript-Marker «#!» nicht verwendet. Dadurch entsteht eine ausführbare Datei, die mehrere verschiedene Formate kombiniert, die in Linux, BSD, Windows und macOS verwendet werden.$ 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) hören auf http://127.0.0.1:8080 >: wartet auf Befehl… $ curl https://127.0.0.1:8080/hello.html hello $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 hello



Quelle: opennet.ru
Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster