Redbean 2.0-projektets utgÄva har presenterats, som erbjuder en webserver som möjliggör att leverera web-applikationer i form av en universell körbar fil, som kan köras i Linux, Windows, MacOS, FreeBSD, NetBSD och OpenBSD. Alla resurser relaterade till web-applikationen och servern komprimeras till en enda körbar fil, som samtidigt Àr kompatibel med ZIP-arkivformatet och tillÄter anvÀndning av zip-verktyget för att lÀgga till extra filer. Möjligheten att köra en fil pÄ olika operativsystem och dess erkÀnnande som ett ZIP-arkiv uppnÄs genom manipulering av huvuden i körbara filer och lÀnkning med det plattformsoberoende standard C-biblioteket Cosmopolitan. Projektets kod distribueras under ISC-licens.
Idén med projektet Àr att leverera en enda körbar fil "redbean.com" med en inbyggd webserver. Utvecklaren av web-applikationen kan med hjÀlp av zip-verktyget lÀgga till HTML- och Lua-filer i denna fil och fÄ ett sjÀlvstÀndigt web-applikation, som kan köras pÄ alla populÀra operativsystem och inte krÀver en separat webserver för att fungera.
Efter att den genererade körbara filen har startats anvÀnds den inbyggda webservern för att komma Ät web-applikationen som sparats i filen. Som standard kopplas hanteraren till localhost, men servern kan ocksÄ anvÀndas som en vanlig offentlig webserver (till exempel denna server betjÀnar projektets webbplats). Den inbyggda webservern stödjer Ätkomst via HTTPS och kan köras med sandbox-isolering, vilket gör det möjligt att kontrollera tillgÄngen till systemgrÀnssnitt. För att hantera serverns arbete medan den körs finns ett interaktivt REPL-grÀnssnitt (baserat pÄ Lua REPL och biblioteket bestline, som Àr en motsvarighet till GNU Readline), vilket ger möjlighet att Àndra processens tillstÄnd i interaktivt lÀge.
Det pÄstÄs att webservern kan hantera mer Àn en miljon förfrÄgningar per sekund pÄ en vanlig PC, och leverera innehÄll komprimerat med gzip-metoden. Den höga prestandan beror pÄ att zip och gzip anvÀnder ett gemensamt format, vilket gör att data kan överlÀmnas utan ompackning frÄn redan komprimerade omrÄden i zip-filen. Dessutom, eftersom det körbara programmet skapades med statisk lÀnkning och har en liten storlek, leder anropet av funktionen fork nÀstan inte till kostnader nÀr det placeras i minnet.
Förutom att hantera statiskt webbinnehÄll och utföra JavaScript i webblÀsaren, kan logiken för webapplikationen utvidgas med skript pÄ Lua-sprÄket, webbramverket Fullmoon och databashanteraren SQLite. Bland de ytterligare möjligheterna nÀmns stöd för hash-algoritmen argon2, möjlighet till IP-regionbestÀmning med MaxMind-databasen och Ätkomst till Unix API-biblioteket Cosmopolitan. Den grundlÀggande stackens storlek, som inkluderar webserver, MbedTLS, Cosmopolitan, Lua och SQLite, Àr endast 1,9 MB.
Den universella körbara filen skapas genom att kombinera segment och rubriker specifika för olika operativsystem (PE, ELF, MACHO, OPENBSD, ZIP) i en enda fil. För att sÀkerstÀlla att en körbar fil kan köras bÄde i Windows och Unix-system anvÀnds en trick, dÀr Windows PE-filer kodas som shell-skript, med tanke pÄ att Thompson Shell inte anvÀnder skriptmarkören "#!". Resultatet blir en körbar fil dÀr flera olika format, som anvÀnds i Linux, BSD, Windows och macOS, kombineras. $ 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) lyssnar http://127.0.0.1:8080 >: vÀntar pÄ kommando⊠$ curl https://127.0.0.1:8080/hello.html hello $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 hello
KĂ€lla: opennet.ru
