Ang Redbean 2.0 ay isang platform para sa mga web application na nakabalot sa isang unibersal na executable ZIP archive

Ang paglabas ng proyektong Redbean 2.0 ay ipinakita, na nag-aalok ng isang web server na nagbibigay-daan sa iyong maghatid ng mga web application sa anyo ng isang unibersal na maipapatupad na file na maaaring isagawa sa Linux, Windows, MacOS, FreeBSD, NetBSD at OpenBSD. Ang lahat ng mga mapagkukunan na nauugnay sa web application at server ay pinagsama-sama sa isang solong maipapatupad na file, na tugma sa format ng ZIP archive at nagbibigay-daan sa iyong gamitin ang zip utility upang magdagdag ng mga karagdagang file. Ang kakayahang magpatakbo ng isang file sa iba't ibang OS at makilala ito bilang isang ZIP archive ay nakakamit sa pamamagitan ng pagmamanipula ng mga executable file header at pag-link sa multi-platform na standard C library na Cosmopolitan. Ang code ng proyekto ay ipinamahagi sa ilalim ng lisensya ng ISC.

Ang ideya ng proyekto ay magbigay ng isang executable file na "redbean.com" na may built-in na web server. Maaaring gamitin ng developer ng web application ang zip utility para magdagdag ng HTML at Lua file sa file na ito at makakuha ng self-contained na web application na tumatakbo sa lahat ng sikat na operating system at hindi nangangailangan ng hiwalay na web server para tumakbo sa system.

Pagkatapos ilunsad ang resultang maipapatupad na file, ang built-in na web server ay ginagamit upang ma-access ang web application na naka-save sa file. Bilang default, ang handler ay naka-attach sa localhost, ngunit ang server ay maaari ding gamitin bilang isang regular na pampublikong web server (halimbawa, ang server na ito ay nagsisilbi sa website ng proyekto). Sinusuportahan ng built-in na Web server ang HTTPS access at maaaring isagawa gamit ang sandbox isolation, na nagbibigay-daan sa iyong kontrolin kung aling mga interface ng system ang ina-access. Upang makontrol ang pagpapatakbo ng server sa panahon ng pagpapatupad nito, isang interactive na interface ng REPL ay ibinigay (batay sa Lua REPL at sa bestline library, isang analogue ng GNU Readline), na ginagawang posible na baguhin ang estado ng proseso nang interactive.

Sinasabing ang web server ay may kakayahang magproseso ng higit sa isang milyong kahilingan sa bawat segundo sa isang regular na PC, na naghahatid ng nilalamang naka-compress sa gzip. Ang nakakatulong sa performance ay ang zip at gzip ay gumagamit ng karaniwang format, kaya ang data ay inihahatid nang hindi nire-repack mula sa mga naka-compress na lugar sa zip file. Bilang karagdagan, dahil ang executable ay nilikha gamit ang static na pag-link at maliit ang laki, ang pagtawag sa tinidor dito ay nagpapakilala ng kaunti hanggang sa walang memorya sa itaas.

Bilang karagdagan sa pagproseso ng static na nilalaman ng web at pag-execute ng JavaScript sa browser, ang logic ng web application ay maaaring palawakin gamit ang mga script sa Lua, ang Fullmoon web framework at ang SQLite DBMS. Kasama sa mga karagdagang feature ang suporta para sa argon2 password hashing scheme, ang kakayahang matukoy ang IP region gamit ang MaxMind database, at access sa Unix API ng Cosmopolitan library. Ang laki ng pangunahing stack, na kinabibilangan ng isang web server, MbedTLS, Cosmopolitan, Lua at SQLite, ay 1.9 MB lang.

Ang isang unibersal na maipapatupad na file ay nabuo sa pamamagitan ng pagsasama-sama ng mga segment at header na partikular sa iba't ibang mga operating system (PE, ELF, MACHO, OPENBSD, ZIP) sa isang file. Upang matiyak na ang isang solong executable na file ay tumatakbo sa Windows at Unix system, ang isang trick ay ang pag-encode ng mga file ng Windows PE bilang shell script, sinasamantala ang katotohanang hindi ginagamit ng Thompson Shell ang β€œ#!” script marker. Ang resulta ay isang executable file na pinagsasama ang ilang iba't ibang format na ginagamit sa Linux, BSD, Windows at 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) makinig http://127.0.0.1:8080 >: naghihintay ng utos… $ curl https://127.0.0.1:8080/hello .html hello $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 kumusta



Pinagmulan: opennet.ru

Magdagdag ng komento