Redbean 2.0 is in platfoarm foar webapplikaasjes ferpakt yn in universele útfierber ZIP-argyf

De frijlitting fan it Redbean 2.0-projekt wurdt presintearre, en biedt in webserver wêrmei jo webapplikaasjes kinne leverje yn 'e foarm fan in universele útfierber bestân dat kin wurde útfierd op Linux, Windows, MacOS, FreeBSD, NetBSD en OpenBSD. Alle boarnen dy't ferbûn binne mei de webapplikaasje en tsjinner wurde kompilearre yn ien útfierber bestân, dat kompatibel is mei it ZIP-argyfformaat en jo it zip-hulpprogramma kinne brûke om ekstra bestannen ta te foegjen. De mooglikheid om ien bestân op ferskate OS's út te fieren en it te erkennen as in ZIP-argyf wurdt berikt troch it manipulearjen fan útfierbere triemkoppen en keppeljen mei de multi-platfoarm standert C-bibleteek Cosmopolitan. De projektkoade wurdt ferspraat ûnder de ISC-lisinsje.

It idee fan it projekt is om ien útfierber bestân "redbean.com" te leverjen mei in ynboude webserver. In webapplikaasje-ûntwikkelder kin it zip-hulpprogramma brûke om HTML- en Lua-bestannen ta te foegjen oan dit bestân en krije in selsstannige webapplikaasje dy't rint op alle populêre bestjoeringssystemen en hat gjin aparte webserver nedich om op it systeem te rinnen.

Nei it starten fan it resultearjende útfierbere bestân wurdt de ynboude webserver brûkt om tagong te krijen ta de webapplikaasje dy't yn it bestân is opslein. Standert is de handler hechte oan localhost, mar de tsjinner kin ek brûkt wurde as in gewoane iepenbiere webserver (bygelyks, dizze tsjinner tsjinnet de projektwebside). De ynboude webserver stipet HTTPS-tagong en kin útfierd wurde mei sânbox-isolaasje, wêrtroch jo kinne kontrolearje hokker systeemynterfaces tagong wurde. Om de wurking fan 'e tsjinner by de útfiering te kontrolearjen, wurdt in ynteraktive REPL-ynterface levere (basearre op de Lua REPL en de bestline-bibleteek, in analoog fan GNU Readline), wêrtroch it mooglik is om de steat fan it proses ynteraktyf te feroarjen.

Der wurdt beweare dat de webserver yn steat is mear as in miljoen oanfragen per sekonde te ferwurkjen op in gewoane PC, en tsjinnet gzip-komprimearre ynhâld. Wat de prestaasjes helpt is dat zip en gzip in mienskiplik formaat brûke, sadat gegevens wurde betsjinne sûnder opnij ynpakt te wurden fan al komprimearre gebieten yn it zip-bestân. Derneist, om't it útfierbere is makke mei statyske keppeling en lyts yn grutte is, yntroduseart ropgabel derop praktysk gjin ûnthâld tawizing overhead.

Neist it ferwurkjen fan statyske webynhâld en it útfieren fan JavaScript yn 'e browser, kin de webapplikaasjelogika útwreide wurde mei skripts yn Lua, it Fullmoon-webkader en de SQLite DBMS. Oanfoljende funksjes omfetsje stipe foar it argon2-wachtwurd-hashingskema, de mooglikheid om de IP-regio te bepalen mei de MaxMind-database, en tagong ta de Unix API fan 'e Cosmopolitan bibleteek. De grutte fan 'e basisstapel, dy't in webserver, MbedTLS, Cosmopolitan, Lua en SQLite omfettet, is mar 1.9 MB.

In universele útfierbere triem wurdt foarme troch it kombinearjen fan segminten en kopteksten spesifyk foar ferskate bestjoeringssystemen (PE, ELF, MACHO, OPENBSD, ZIP) yn ien bestân. Om te soargjen dat in inkeld útfierber bestân rint op Windows- en Unix-systemen, is in trúk om Windows PE-bestannen te kodearjen as in shellskript, en profitearje fan it feit dat Thompson Shell de "#!"-skriptmarker net brûkt. It resultaat is in útfierber bestân dat ferskate ferskillende formaten kombinearret brûkt yn Linux, BSD, Windows en macOS. $ krul 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) harkje http://127.0.0.1:8080 >: wachtsje op kommando... $ curl https://127.0.0.1:8080/hello .html hallo $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 hallo



Boarne: opennet.ru

Add a comment