Redbean 2.0 vĂ€ljaanne tutvustab veebiserverit, mis vĂ”imaldab veebirakendusi pakkuda universaalses tĂ€ideviidavas failivormingus, mida saab kĂ€ivitada Linuxis, Windowsis, macOS-is, FreeBSD-s, NetBSD-s ja OpenBSD-s. KĂ”ik veebirakenduse ja serveriga seotud ressursid koondatakse ĂŒheks tĂ€ideviidavaks failiks, mis on ĂŒhilduv ZIP-arhiiviformaadiga, vĂ”imaldades kasutada zip-utiliiti tĂ€iendavate failide lisamiseks. Ăhe faili kĂ€ivitatavus erinevates operatsioonisĂŒsteemides ja selle tuvastamine ZIP-arhiivina saavutatakse tĂ€ideviidavate failide peade manipuleerimise ja platvormideĂŒlese standardse C-koodi raamatukogu Cosmopolitan'iga sidumise kaudu. Projekti kood on jagatud ISC litsentsi alusel.
Projekti idee on pakkuda ĂŒht tĂ€ideviidavat faili âredbean.comâ koos sisseehitatud veebiserveriga. Veebirakenduse arendaja saab zip-utiliidi abil lisada sellesse faili HTML- ja Lua-faile ning saada tulemusena iseseisva veebirakenduse, mida saab kĂ€itada kĂ”igis populaarsetes operatsioonisĂŒsteemides ning mis ei vaja toimimiseks eraldi veebiserveri kĂ€ivitamist.
PĂ€rast genereeritud tĂ€ideviidava faili kĂ€ivitamist kasutatakse failis salvestatud veebirakendusele juurdepÀÀsuks sisseehitatud veebiserverit. Vaikimisi kinnitatakse sĂ”numi töötleja localhostile, kuid serverit saab kasutada ka tavapĂ€rase avaliku veebiserverina (nĂ€iteks teenindab see projekti veebisaiti). Sisseehitatud veebiserver toetab HTTPS-ile juurdepÀÀsu ja vĂ”ib töötada liivakasti isolatsiooniga, mis vĂ”imaldab kontrollida, millistele sĂŒsteemi jĂ”ududele juurdepÀÀs toimub. Serveri töö haldamiseks selle töötamise ajal on saadaval interaktiivne REPL-liidest (Lua REPL ja bestline raamatukogu, mis on GNU Readline analoog), mis vĂ”imaldab interaktiivses reĆŸiimis protsessi olekut muuta.
Kinnitus on, et veebiserver suudab tavalises PC-s töödelda ĂŒle miljoni pĂ€ringu sekundis, edastades sisu gzip-i meetodiga kokku surununa. KĂ”rge jĂ”udluse tagab see, et zip ja gzip kasutavad ĂŒhiste vormingute struktuuri, seetĂ”ttu edastatakse andmed ilma zip-failis juba kokku surutud alade uuesti pakendamiseta. Lisaks, kuna tĂ€ideviidav fail on loodud staatilise sidumise abil ja selle suurus on vĂ€ike, siis fork-funktsiooni kutsumine ei too peaaegu mingit mĂ€lukasutuse kulukust.
Peale staatilise veebisisu töötlemise ja JavaScripti tÀitmise brauseris saab veebirakenduse loogikat laiendada Lua-skriptide, Fullmoon veebiraamistiku ja SQLite andmebaasi kaudu. TÀiendavate vÔimaluste seas on mÀrgitud argon2 paroolide rÀsi skeemi toetamine, IP piirkonna mÀÀramise vÔimalus MaxMind andmebaasi alusel ja juurdepÀÀs Unix API-le Cosmpolitan raamatukogu kaudu. Baasteki suurus, mis sisaldab veebiserverit, MbedTLS, Cosmopolitan, Lua ja SQLite, on vaid 1.9 MB.
Ăks universaalne tĂ€ideviidav fail moodustatakse erinevate operatsioonisĂŒsteemide jaoks spetsiifiliste segmentide ja peade (PE, ELF, MACHO, OPENBSD, ZIP) kombineerimise teel ĂŒhte faili. Et tagada ĂŒhe tĂ€ideviidava faili kĂ€ivitamine Windowsi ja Unix-sĂŒsteemides, kasutatakse trikki, mille olemus seisneb Windows PE failide kodeerimises shell-skripti kujul, arvestades, et Thompson Shell ei kasuta skripti markerit â#!â. Tulemuseks on tĂ€ideviidav fail, kus on kombineeritud mitmeid erinevaid vorminguid, mida kasutatakse Linuxis, BSD-s, Windowsis ja macOS-is. $ 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) listen http://127.0.0.1:8080 >: waiting for command⊠$ curl https://127.0.0.1:8080/hello.html hello $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 hello
Allikas: opennet.ru
