Redbean 2.0 là một nền tảng dành cho các ứng dụng web được đóng gói trong kho lưu trữ ZIP có thể thực thi phổ biến

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

Идея проекта в поставке одного исполняемого файла «redbean.com» со встроенным web-сервером. Разработчик web-приложения может при помощи утилиты zip добавить в этот файл HTML и Lua-файлы и получить на выходе самодостаточное web-приложение, выполняемого во всех популярных ОС и не требующего для работы запуска в системе отдельного web-сервера.

После запуска полученного исполняемого файла, для обращения к сохранённому в файле web-приложению используется встроенный web-сервер. По умолчанию обработчик прикрепляется к localhost, но сервер может применяться и в качестве обычного публичного web-сервера (например, данный сервер обслуживает сайт проекта). Встроенный Web-сервер поддерживает обращение по HTTPS и может выполняться с использованием sandbox-изоляции, позволяющей контролировать к каким системным интерфейсам производится обращение. Для управления работой сервера во время его выполнения предоставляется интерактивный интерфейс REPL (на базе Lua REPL и библиотеки bestline, аналога GNU Readline), дающий возможность изменять состояние процесса в интерактивном режиме.

Утверждается, что web-сервер способен обработать более миллиона запросов в секунду на обычном ПК, отдавая контент, сжатый методом gzip. Высокой производительности способствует то, что zip и gzip используют общий формат, поэтому данные отдаются без перепаковки из уже сжатых областей в zip-файле. Кроме того, так как исполняемый файл создан с использованием статического связывания и имеет небольшой размер, вызов функции fork для него практически не приводит к накладным расходам при размещении в памяти.

Помимо обработки статического web-контента и выполнения JavaScript в браузере, логика web-приложения может расширяться при помощи скриптов на языке Lua, web-фреймворка Fullmoon и СУБД SQLite. Среди дополнительных возможностей отмечается поддержка схемы хэширования паролей argon2, возможность определения региона IP по базе MaxMind и доступ к Unix API библиотеки Cosmopolitan. Размер базового стека, включающего web-сервер, MbedTLS, Cosmopolitan, Lua и SQLite, составляет всего 1.9 МБ.

Универсальный исполняемый файл формируется путём совмещения специфичных для разных операционных систем сегментов и заголовков (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



Nguồn: opennet.ru

Thêm một lời nhận xét