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

添加評論