Redbean 2.0 er en platform til webapplikationer pakket i et universelt eksekverbart ZIP-arkiv

Udgivelsen af ​​Redbean 2.0-projektet præsenteres, der tilbyder en webserver, der giver dig mulighed for at levere webapplikationer i form af en universel eksekverbar fil, der kan eksekveres på Linux, Windows, MacOS, FreeBSD, NetBSD og OpenBSD. Alle ressourcer forbundet med webapplikationen og serveren er kompileret i en enkelt eksekverbar fil, som er kompatibel med ZIP-arkivformatet og giver dig mulighed for at bruge zip-værktøjet til at tilføje yderligere filer. Evnen til at køre en fil på forskellige OS'er og få den genkendt som et ZIP-arkiv opnås ved at manipulere eksekverbare filoverskrifter og linke til multi-platform standard C-biblioteket Cosmopolitan. Projektkoden distribueres under ISC-licensen.

Ideen med projektet er at levere én eksekverbar fil "redbean.com" med en indbygget webserver. En webapplikationsudvikler kan bruge zip-værktøjet til at tilføje HTML- og Lua-filer til denne fil og få en selvstændig webapplikation, der kører på alle populære operativsystemer og ikke kræver en separat webserver for at køre på systemet.

Efter lancering af den resulterende eksekverbare fil, bruges den indbyggede webserver til at få adgang til den webapplikation, der er gemt i filen. Som standard er handleren knyttet til localhost, men serveren kan også bruges som en almindelig offentlig webserver (f.eks. betjener denne server projektets hjemmeside). Den indbyggede webserver understøtter HTTPS-adgang og kan udføres ved hjælp af sandbox-isolation, som giver dig mulighed for at kontrollere, hvilke systemgrænseflader der tilgås. For at kontrollere driften af ​​serveren under dens udførelse er der tilvejebragt en interaktiv REPL-grænseflade (baseret på Lua REPL og bestline-biblioteket, en analog til GNU Readline), som gør det muligt at ændre processens tilstand interaktivt.

Det hævdes, at webserveren er i stand til at behandle mere end en million anmodninger i sekundet på en almindelig pc, der serverer gzip-komprimeret indhold. Det, der hjælper på ydeevnen, er, at zip og gzip bruger et fælles format, så data serveres uden at blive pakket om fra allerede komprimerede områder i zip-filen. Derudover, da den eksekverbare er oprettet ved hjælp af statisk linking og er lille i størrelse, introducerer calling fork på den lidt eller ingen hukommelsesomkostninger.

Udover at behandle statisk webindhold og eksekvere JavaScript i browseren, kan webapplikationslogikken udvides ved hjælp af scripts i Lua, Fullmoon webframework og SQLite DBMS. Yderligere funktioner omfatter understøttelse af argon2 adgangskode-hash-skemaet, muligheden for at bestemme IP-regionen ved hjælp af MaxMind-databasen og adgang til Unix API'et i Cosmopolitan-biblioteket. Størrelsen af ​​den grundlæggende stak, som inkluderer en webserver, MbedTLS, Cosmopolitan, Lua og SQLite, er kun 1.9 MB.

En universel eksekverbar fil dannes ved at kombinere segmenter og overskrifter, der er specifikke for forskellige operativsystemer (PE, ELF, MACHO, OPENBSD, ZIP) i én fil. For at sikre, at en enkelt eksekverbar fil kører på Windows- og Unix-systemer, er et trick at kode Windows PE-filer som et shell-script og udnytte det faktum, at Thompson Shell ikke bruger "#!"-scriptmarkøren. Resultatet er en eksekverbar fil, der kombinerer flere forskellige formater, der bruges i Linux, BSD, Windows og 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) lyt http://127.0.0.1:8080 >: venter på kommando... $ curl https://127.0.0.1:8080/hello .html hej $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 hej



Kilde: opennet.ru

Tilføj en kommentar