Redbean 2.0 to platforma dla aplikacji internetowych spakowana w uniwersalnym wykonywalnym archiwum ZIP

Zaprezentowano wydanie projektu Redbean 2.0, oferującego serwer WWW, który umożliwia dostarczanie aplikacji internetowych w postaci uniwersalnego pliku wykonywalnego, który można uruchomić na systemach Linux, Windows, MacOS, FreeBSD, NetBSD i OpenBSD. Wszystkie zasoby powiązane z aplikacją internetową i serwerem są zebrane w jeden plik wykonywalny, który jest zgodny z formatem archiwum ZIP i pozwala na użycie narzędzia zip w celu dodania dodatkowych plików. Możliwość uruchomienia jednego pliku w różnych systemach operacyjnych i rozpoznania go jako archiwum ZIP osiąga się poprzez manipulowanie nagłówkami plików wykonywalnych i łączenie z wieloplatformową standardową biblioteką C Cosmopolitan. Kod projektu jest rozpowszechniany na licencji ISC.

Ideą projektu jest dostarczenie jednego pliku wykonywalnego „redbean.com” z wbudowanym serwerem WWW. Twórca aplikacji internetowych może użyć narzędzia zip, aby dodać do tego pliku pliki HTML i Lua i uzyskać samodzielną aplikację internetową, która działa na wszystkich popularnych systemach operacyjnych i nie wymaga oddzielnego serwera WWW do działania w systemie.

Po uruchomieniu powstałego pliku wykonywalnego, wbudowany serwer WWW umożliwia dostęp do aplikacji internetowej zapisanej w pliku. Domyślnie moduł obsługi jest podłączony do localhost, ale serwera można również używać jako zwykłego publicznego serwera WWW (na przykład serwer ten obsługuje witrynę projektu). Wbudowany serwer WWW obsługuje dostęp HTTPS i może być realizowany przy użyciu izolacji typu sandbox, co pozwala kontrolować, do jakich interfejsów systemu uzyskiwany jest dostęp. Aby kontrolować pracę serwera podczas jego wykonywania, zapewniono interaktywny interfejs REPL (oparty na Lua REPL i bibliotece bestline, analogie GNU Readline), który umożliwia interaktywną zmianę stanu procesu.

Twierdzi się, że serwer WWW jest w stanie przetworzyć ponad milion żądań na sekundę na zwykłym komputerze PC, obsługując zawartość skompresowaną za pomocą programu Gzip. Wydajność poprawia fakt, że zip i gzip używają wspólnego formatu, więc dane są dostarczane bez przepakowywania z już skompresowanych obszarów pliku ZIP. Dodatkowo, ponieważ plik wykonywalny jest tworzony przy użyciu statycznego łączenia i ma mały rozmiar, wywołanie fork powoduje niewielkie lub żadne obciążenie pamięci.

Oprócz przetwarzania statycznych treści internetowych i wykonywania JavaScript w przeglądarce, logikę aplikacji internetowych można rozszerzyć za pomocą skryptów w Lua, frameworku sieciowym Fullmoon i systemie DBMS SQLite. Dodatkowe funkcje obejmują obsługę schematu mieszania haseł argon2, możliwość określenia regionu IP przy użyciu bazy danych MaxMind oraz dostęp do uniksowego API biblioteki Cosmopolitan. Rozmiar podstawowego stosu, który obejmuje serwer WWW, MbedTLS, Cosmopolitan, Lua i SQLite, wynosi tylko 1.9 MB.

Uniwersalny plik wykonywalny powstaje poprzez połączenie segmentów i nagłówków specyficznych dla różnych systemów operacyjnych (PE, ELF, MACHO, OPENBSD, ZIP) w jednym pliku. Aby mieć pewność, że pojedynczy plik wykonywalny będzie działać w systemach Windows i Unix, sztuczka polega na zakodowaniu plików Windows PE jako skryptu powłoki, wykorzystując fakt, że powłoka Thompson Shell nie używa znacznika skryptu „#!”. Rezultatem jest plik wykonywalny, który łączy w sobie kilka różnych formatów używanych w systemach Linux, BSD, Windows i 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) słuchaj http://127.0.0.1:8080 >: czekam na polecenie… $ curl https://127.0.0.1:8080/hello .html hello $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 Witam



Źródło: opennet.ru

Dodaj komentarz