Redbean 2.0 è una piattaforma per applicazioni web confezionata in un archivio ZIP eseguibile universale

Viene presentata la versione del progetto Redbean 2.0, che offre un server web che consente di fornire applicazioni web sotto forma di file eseguibile universale che può essere eseguito su Linux, Windows, MacOS, FreeBSD, NetBSD e OpenBSD. Tutte le risorse associate all'applicazione Web e al server sono compilate in un unico file eseguibile, compatibile con il formato di archivio ZIP e consente di utilizzare l'utilità zip per aggiungere file aggiuntivi. La capacità di eseguire un file su diversi sistemi operativi e di riconoscerlo come archivio ZIP si ottiene manipolando le intestazioni dei file eseguibili e collegandosi alla libreria C standard multipiattaforma Cosmopolitan. Il codice del progetto è distribuito sotto la licenza ISC.

L'idea del progetto è quella di fornire un file eseguibile “redbean.com” con un server web integrato. Uno sviluppatore di applicazioni Web può utilizzare l'utilità zip per aggiungere file HTML e Lua a questo file e ottenere un'applicazione Web autonoma che funziona su tutti i sistemi operativi più diffusi e non richiede un server Web separato per l'esecuzione sul sistema.

Dopo aver avviato il file eseguibile risultante, il server Web integrato viene utilizzato per accedere all'applicazione Web salvata nel file. Per impostazione predefinita, il gestore è collegato a localhost, ma il server può anche essere utilizzato come un normale server Web pubblico (ad esempio, questo server serve il sito Web del progetto). Il server Web integrato supporta l'accesso HTTPS e può essere eseguito utilizzando l'isolamento sandbox, che consente di controllare a quali interfacce di sistema si accede. Per controllare il funzionamento del server durante la sua esecuzione, viene fornita un'interfaccia REPL interattiva (basata su Lua REPL e sulla libreria bestline, un analogo di GNU Readline), che consente di modificare lo stato del processo in modo interattivo.

Si sostiene che il server web sia in grado di elaborare più di un milione di richieste al secondo su un normale PC, fornendo contenuti compressi con gzip. Ciò che aiuta le prestazioni è che zip e gzip utilizzano un formato comune, quindi i dati vengono serviti senza essere reimballati da aree già compresse nel file zip. Inoltre, poiché l'eseguibile viene creato utilizzando il collegamento statico ed è di piccole dimensioni, richiamare il fork su di esso non introduce praticamente alcun sovraccarico di allocazione di memoria.

Oltre all'elaborazione di contenuti web statici e all'esecuzione di JavaScript nel browser, la logica dell'applicazione web può essere ampliata utilizzando script in Lua, il framework web Fullmoon e il DBMS SQLite. Ulteriori funzionalità includono il supporto per lo schema di hashing della password argon2, la possibilità di determinare la regione IP utilizzando il database MaxMind e l'accesso all'API Unix della libreria Cosmopolitan. La dimensione dello stack base, che comprende un server web, MbedTLS, Cosmopolitan, Lua e SQLite, è di soli 1.9 MB.

Un file eseguibile universale è formato combinando segmenti e intestazioni specifici di diversi sistemi operativi (PE, ELF, MACHO, OPENBSD, ZIP) in un unico file. Per garantire che un singolo file eseguibile venga eseguito su sistemi Windows e Unix, un trucco consiste nel codificare i file Windows PE come script di shell, sfruttando il fatto che Thompson Shell non utilizza il marcatore di script "#!". Il risultato è un file eseguibile che combina diversi formati utilizzati in Linux, BSD, Windows e macOS. $ curl https://redbean.dev/redbean-demo-2.0.7.com >redbean.com $ chmod +x redbean.com $ zip redbean.com ciao.html $ zip redbean.com ciao.lua $ ./redbean .com -vv I2022-06-23T08:27:14+000767:redbean] (srvr) ascolta http://127.0.0.1:8080 >: in attesa del comando… $ curl https://127.0.0.1:8080/hello .html ciao $ printf 'OTTIENI /ciao.lua\n\n' | nc 127.0.0.1 8080 ciao



Fonte: opennet.ru

Aggiungi un commento