Redbean 2.0 — платформа за уеб приложения, опаковани в универсален изпълним ZIP архив

Представен е новият проект Redbean 2.0, който предлага уеб сървър, позволяващ доставката на уеб приложения под формата на универсален изпълним файл, който може да се изпълнява в Linux, Windows, MacOS, FreeBSD, NetBSD и OpenBSD. Всички ресурси, свързани с уеб приложението и сървъра, са комбинирани в един изпълним файл, който е съвместим с формата на ZIP архиви и позволява използването на утилитата zip за добавяне на допълнителни файлове. Възможността за стартиране на един файл на различни ОС и разпознаването му като ZIP архив се постига чрез манипулации с заглавките на изпълнимите файлове и свързването със стандартната многоплатформена C библиотека Cosmopolitan. Кодът на проекта се разпространява под лиценз ISC.

Идеята на проекта е доставката на един изпълняем файл „redbean.com“ с вграден уеб сървър. Разработчикът на уеб приложението може с помощта на утилитата zip да добави HTML и Lua файлове в този файл и да получи самостоятелно уеб приложение, което работи на всички популярни ОС и не изисква стартирането на отделен уеб сървър в системата.

След стартиране на получения изпълним файл, за достъп до съхраненото в него уеб приложение се използва вграденият уеб сървър. По подразбиране обработчикът е прикрепен към localhost, но сървърът може да се използва и като обикновен публичен уеб сървър (например, този сървър обслужва сайта на проекта). Вграденият уеб сървър поддържа достъп по HTTPS и може да работи с използване на sandbox изолация, позволяваща контрол на какви системни интерфейси се извършва достъпът. За управление на работата на сървъра по време на неговото изпълнение се предоставя интерактивен интерфейс REPL (базиран на Lua REPL и библиотеката bestline, аналог на GNU Readline), даващ възможност за промяна на състоянието на процеса в интерактивен режим.

Твърди се, че уеб сървърът може да обработва над един милион заявки в секунда на обикновен компютър, предоставяйки съдържание, компресирано с метода gzip. Високата производителност се дължи на факта, че zip и gzip използват общ формат, така че данните се предоставят без повторна компресия от вече компресирани области в zip файла. Освен това, тъй като изпълнимият файл е създаден с помощта на статично свързване и има малък размер, извикването на функцията fork почти не води до накладни разходи при разполагане в паметта.

Освен обработката на статично уеб съдържание и изпълнението на JavaScript в браузъра, логиката на уеб приложението може да се разширява с помощта на скриптове на езика Lua, уеб фреймуърка Fullmoon и базата данни SQLite. Сред допълнителните възможности се отбелязва поддръжката на схемата за хеширане на пароли argon2, възможността за определяне на региона на IP адреса чрез базата данни MaxMind и достъпа до Unix API библиотеката Cosmopolitan. Размерът на основния стек, включващ уеб сървъра, MbedTLS, Cosmopolitan, Lua и SQLite, е само 1.9 MB.

Универсалният изпълним файл се формира чрез комбиниране на сегменти и заглавия, специфични за различни операционни системи (PE, ELF, MACHO, OPENBSD, ZIP) в един файл. За да се осигури стартиране на един изпълним файл в Windows и Unix системи, се използва трик, състоящ се в кодиране на файловете на Windows PE под формата на shell скрипт, като се възползва от факта, че Thompson Shell не използва маркер на скриптове «#!». В резултат се създава изпълним файл, в който са комбинирани няколко различни формата, използвани в Linux, BSD, Windows и 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) 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



Източник: opennet.ru
Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster