Redbean 2.0 ist eine Plattform für Webanwendungen, verpackt in einem universell ausführbaren ZIP-Archiv

Die Veröffentlichung des Redbean 2.0-Projekts wird vorgestellt und bietet einen Webserver, der die Bereitstellung von Webanwendungen in Form einer universellen ausführbaren Datei ermöglicht, die unter Linux, Windows, MacOS, FreeBSD, NetBSD und OpenBSD ausgeführt werden kann. Alle mit der Webanwendung und dem Server verknüpften Ressourcen werden in einer einzigen ausführbaren Datei kompiliert, die mit dem ZIP-Archivformat kompatibel ist und Ihnen die Verwendung des Zip-Dienstprogramms zum Hinzufügen zusätzlicher Dateien ermöglicht. Die Möglichkeit, eine Datei auf verschiedenen Betriebssystemen auszuführen und sie als ZIP-Archiv erkennen zu lassen, wird durch die Manipulation der Header ausführbarer Dateien und die Verknüpfung mit der plattformübergreifenden Standard-C-Bibliothek Cosmopolitan erreicht. Der Projektcode wird unter der ISC-Lizenz vertrieben.

Die Idee des Projekts besteht darin, eine ausführbare Datei „redbean.com“ mit einem integrierten Webserver bereitzustellen. Ein Webanwendungsentwickler kann das Zip-Dienstprogramm verwenden, um HTML- und Lua-Dateien zu dieser Datei hinzuzufügen und eine eigenständige Webanwendung zu erhalten, die auf allen gängigen Betriebssystemen läuft und für deren Ausführung kein separater Webserver auf dem System erforderlich ist.

Nach dem Starten der resultierenden ausführbaren Datei wird der integrierte Webserver verwendet, um auf die in der Datei gespeicherte Webanwendung zuzugreifen. Standardmäßig ist der Handler an localhost angehängt, der Server kann jedoch auch als regulärer öffentlicher Webserver verwendet werden (dieser Server bedient beispielsweise die Projektwebsite). Der integrierte Webserver unterstützt HTTPS-Zugriff und kann mithilfe der Sandbox-Isolation ausgeführt werden, wodurch Sie steuern können, auf welche Systemschnittstellen zugegriffen wird. Um den Betrieb des Servers während seiner Ausführung zu steuern, wird eine interaktive REPL-Schnittstelle bereitgestellt (basierend auf der Lua REPL und der Bestline-Bibliothek, einem Analogon von GNU Readline), die es ermöglicht, den Status des Prozesses interaktiv zu ändern.

Es wird behauptet, dass der Webserver in der Lage ist, mehr als eine Million Anfragen pro Sekunde auf einem normalen PC zu verarbeiten und gzip-komprimierte Inhalte bereitzustellen. Was die Leistung verbessert, ist, dass zip und gzip ein gemeinsames Format verwenden, sodass Daten bereitgestellt werden, ohne dass sie aus bereits komprimierten Bereichen in der Zip-Datei neu gepackt werden müssen. Da die ausführbare Datei außerdem über statische Verknüpfung erstellt wird und klein ist, verursacht der Aufruf von fork praktisch keinen Mehraufwand bei der Speicherzuweisung.

Neben der Verarbeitung statischer Webinhalte und der Ausführung von JavaScript im Browser kann die Webanwendungslogik mithilfe von Skripten in Lua, dem Fullmoon-Webframework und dem SQLite-DBMS erweitert werden. Zu den weiteren Funktionen gehören die Unterstützung des Argon2-Passwort-Hashing-Schemas, die Möglichkeit, die IP-Region mithilfe der MaxMind-Datenbank zu bestimmen und Zugriff auf die Unix-API der Cosmopolitan-Bibliothek. Die Größe des Basis-Stacks, der einen Webserver, MbedTLS, Cosmopolitan, Lua und SQLite umfasst, beträgt nur 1.9 MB.

Eine universelle ausführbare Datei entsteht durch die Kombination von Segmenten und Headern, die für verschiedene Betriebssysteme (PE, ELF, MACHO, OPENBSD, ZIP) spezifisch sind, in einer Datei. Um sicherzustellen, dass eine einzelne ausführbare Datei auf Windows- und Unix-Systemen ausgeführt wird, besteht ein Trick darin, Windows PE-Dateien als Shell-Skript zu kodieren und dabei die Tatsache auszunutzen, dass Thompson Shell nicht die Skriptmarkierung „#!“ verwendet. Das Ergebnis ist 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) listen http://127.0.0.1:8080 >: Warten auf Befehl… $ curl https://127.0.0.1:8080/hello .html hallo $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 Hallo



Source: opennet.ru

Kommentar hinzufügen