Redbean 2.0 是一个打包在通用可执行 ZIP 存档中的 Web 应用程序平台

Redbean 2.0 项目发布,提供了一个 Web 服务器,允许您以通用可执行文件的形式交付 Web 应用程序,该文件可以在 Linux、Windows、MacOS、FreeBSD、NetBSD 和 OpenBSD 上执行。 与 Web 应用程序和服务器关联的所有资源都编译为单个可执行文件,该文件与 ZIP 存档格式兼容,并允许您使用 zip 实用程序添加其他文件。 通过操作可执行文件头并与多平台标准 C 库 Cosmopolitan 链接,可以实现在不同操作系统上运行一个文件并将其识别为 ZIP 存档的能力。 项目代码根据 ISC 许可证分发。

该项目的想法是提供一个带有内置 Web 服务器的可执行文件“redbean.com”。 Web 应用程序开发人员可以使用 zip 实用程序将 HTML 和 Lua 文件添加到此文件中,并获得一个独立的 Web 应用程序,该应用程序可以在所有流行的操作系统上运行,并且不需要在系统上运行单独的 Web 服务器。

启动生成的可执行文件后,内置 Web 服务器用于访问文件中保存的 Web 应用程序。 默认情况下,处理程序附加到 localhost,但该服务器也可以用作常规公共 Web 服务器(例如,该服务器为项目网站提供服务)。 内置的Web服务器支持HTTPS访问,并且可以使用沙箱隔离执行,这允许您控制访问哪些系统接口。 为了在服务器执行期间控制服务器的操作,提供了一个交互式 REPL 接口(基于 Lua REPL 和 bestline 库,GNU Readline 的类似物),这使得交互式地改变进程的状态成为可能。

据称,该网络服务器能够在普通 PC 上每秒处理超过一百万个请求,提供 gzip 压缩内容。 对性能有帮助的是 zip 和 gzip 使用通用格式,因此无需从 zip 文件中已压缩的区域重新打包数据即可提供数据。 此外,由于可执行文件是使用静态链接创建的并且尺寸较小,因此在其上调用 fork 会带来很少甚至没有内存开销。

除了在浏览器中处理静态 Web 内容和执行 JavaScript 之外,还可以使用 Lua、Fullmoon Web 框架和 SQLite DBMS 中的脚本来扩展 Web 应用程序逻辑。 其他功能包括支持 argon2 密码散列方案、使用 MaxMind 数据库确定 IP 区域的能力以及对 Cosmopolitan 库的 Unix API 的访问。 包括 Web 服务器、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) 监听 http://127.0.0.1:8080 >: 等待命令... $curl https://127.0.0.1:8080/hello .html 你好 $ printf 'GET /hello.lua\n\n' | 数控 127.0.0.1 8080 你好



来源: opennet.ru

添加评论