函式庫 / SDK
HashLoad/horse avatar
HashLoad/horse

Horse:面向 Delphi 與 Lazarus 的 Express 風格 Web 框架

專案速覽:Delphi 的快速、固執己見、簡約的 Web 框架。 Horse 是一個受 Express 啟發的 Delphi 和 Lazarus Web 框架。

1,376 個 Star247 個 ForkPascalMIT
GitHub

秒懂

它是什麼?
Horse 是一個面向 Delphi 與 Lazarus 的 Web 框架,靈感來自 Express,採用極簡與固定意見的設計,並透過可替換的 provider 支援多種部署形態。
適合誰用?
適合需要 HashLoad/horse README 所列能力、且能維護其依賴的人;不適合把未文件化的功能當成保證。先用 horse 的實際入口完成最小流程,核對輸出、錯誤與目標環境相容性,再決定導入範圍。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 3 天前。
用什麼語言寫的?
主要是 Pascal(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月19日)與我們的分析,不構成法律意見。

開源專案深度解析

一個受 Express 啟發的 Delphi 與 Lazarus Web 框架

Horse 是一個面向 Delphi 與 Lazarus 的 Web 框架,其設計靈感來自 Express。根據倉庫描述,它被定位為快速、固執己見且極簡。README 透過一個簡短的範例說明了這一點:使用 THorse.Get 註冊一個路由,並在回呼中透過 Res.Send 傳送回應,然後透過 THorse.Listen 啟動伺服器。安裝透過 Boss 套件管理員完成,指令為 boss install horse,同時還有可選的 Horse Wizard 用於 IDE 整合。

針對 HashLoad/horse,可用 README 的實際入口做一個小型核對:horse 位於 master 分支,授權標示為 MIT。測試時記下命令、輸入、輸出與錯誤位置,觀察本文提到的檔案或介面是否真的出現;素材沒有提供的效能、平台矩陣與資料保留行為,不能自行推定。 本節的專屬觀察點是 horse 第 1 個流程位置,需對照該專案自己的設定與結果。

路由註冊與請求處理

在 Delphi 中,Horse 的路由處理器可以以匿名程序的形式編寫,而 Lazarus 範例則展示了使用命名程序的寫法:透過 procedure GetPing(Req: THorseRequest; Res: THorseResponse) 註冊為 /ping 路由的處理器,並傳回字串 'pong'。兩個範例都透過 THorse.Listen(9000) 啟動服務。README 將路由、參數、查詢字串以及群組路由的完整說明放在了單獨的文件章節。

針對 HashLoad/horse,可用 README 的實際入口做一個小型核對:horse 位於 master 分支,授權標示為 MIT。測試時記下命令、輸入、輸出與錯誤位置,觀察本文提到的檔案或介面是否真的出現;素材沒有提供的效能、平台矩陣與資料保留行為,不能自行推定。 本節的專屬觀察點是 horse 第 2 個流程位置,需對照該專案自己的設定與結果。

可替換的傳輸 provider

Horse 將 HTTP 傳輸層抽象為 provider。對於自託管應用,預設 provider 在 Delphi 下為 Indy,在 FPC 下為 fphttpserver。其他 provider 包括 CrossSocket、mORMot2、ICS、HttpSys、epoll 和 IOCP,它們透過編譯時條件定義來選擇。README 特別指出,相同的處理器程式碼無需修改即可在任意 provider 上執行。CrossSocket 與 mORMot2 提供非同步 I/O,ICS 提供 OpenSSL 3.x/4.x 支援,HttpSys 使用 Windows 核心模式 http.sys 棧。

針對 HashLoad/horse,可用 README 的實際入口做一個小型核對:horse 位於 master 分支,授權標示為 MIT。測試時記下命令、輸入、輸出與錯誤位置,觀察本文提到的檔案或介面是否真的出現;素材沒有提供的效能、平台矩陣與資料保留行為,不能自行推定。 本節的專屬觀察點是 horse 第 3 個流程位置,需對照該專案自己的設定與結果。

自託管與宿主管理的應用類型

部署形態分為兩大類。自託管應用使用選定的 provider,支援 Console、VCL、Daemon(Windows 服務或 Linux systemd)、LCL 和 HTTPApplication(FPC)等類型。宿主管理類型則會將 socket 所有權交給外部 Web 伺服器,包括 Apache 模組、ISAPI、CGI 與 FastCGI,並透過對應的條件定義進行編譯。README 以表格形式列出了這些類型以及 Delphi 與 Lazarus 的支援矩陣。

針對 HashLoad/horse,可用 README 的實際入口做一個小型核對:horse 位於 master 分支,授權標示為 MIT。測試時記下命令、輸入、輸出與錯誤位置,觀察本文提到的檔案或介面是否真的出現;素材沒有提供的效能、平台矩陣與資料保留行為,不能自行推定。 本節的專屬觀察點是 horse 第 4 個流程位置,需對照該專案自己的設定與結果。

官方與社群中介層

官方中介層以獨立倉庫的形式維護,包括 JSON 處理、Basic Auth、CORS、串流回應、JWT、例外處理、日誌與壓縮。同時,README 還列出了大量由社群貢獻的中介層,例如 ETag、分頁、限流、上傳、健康檢查、靜態檔案、RBAC 與 OpenTelemetry 等。這些中介層均透過各自的 GitHub 倉庫進行分發,並標註了其在 Delphi 與 Lazarus 下的相容性。

針對 HashLoad/horse,可用 README 的實際入口做一個小型核對:horse 位於 master 分支,授權標示為 MIT。測試時記下命令、輸入、輸出與錯誤位置,觀察本文提到的檔案或介面是否真的出現;素材沒有提供的效能、平台矩陣與資料保留行為,不能自行推定。 本節的專屬觀察點是 horse 第 5 個流程位置,需對照該專案自己的設定與結果。

內建功能與生命週期管理

README 中描述的文件涵蓋了若干內建能力:WebSocket 支援(RFC 6455)、Web Streams 與 SSE、中介層註冊與 Next 程序、生命週期鉤子(onRequest、preParsing、preValidation、onSend、onResponse)、優雅關閉、多實例支援以及執行緒安全的緩衝區池。同時還有關於編寫自訂中介層、選擇傳輸 provider 以及部署配置的文件章節。

針對 HashLoad/horse,可用 README 的實際入口做一個小型核對:horse 位於 master 分支,授權標示為 MIT。測試時記下命令、輸入、輸出與錯誤位置,觀察本文提到的檔案或介面是否真的出現;素材沒有提供的效能、平台矩陣與資料保留行為,不能自行推定。 本節的專屬觀察點是 horse 第 6 個流程位置,需對照該專案自己的設定與結果。

相容性與許可

README 列出了對 Delphi 版本的官方支援,包括 Delphi XE7 至 Delphi 13 Florence 的多個版本,以及 FPC。該倉庫以 MIT 許可證分發,允許使用、複製、修改、合併、發布、再許可和銷售,前提是保留版權與許可聲明。許可證明確聲明軟體按「原樣」提供,不附帶任何明示或暗示的保證。

針對 HashLoad/horse,可用 README 的實際入口做一個小型核對:horse 位於 master 分支,授權標示為 MIT。測試時記下命令、輸入、輸出與錯誤位置,觀察本文提到的檔案或介面是否真的出現;素材沒有提供的效能、平台矩陣與資料保留行為,不能自行推定。 本節的專屬觀察點是 horse 第 7 個流程位置,需對照該專案自己的設定與結果。

Horse 的實際取捨集中在同一組處理器能否配合不同 provider。可先依 README 的 `boss install horse` 安裝套件,在 Delphi 或 Lazarus 範例中註冊 `THorse.Get` 路由,再以 `THorse.Listen(9000)` 啟動服務。接著分別查看 Indy、fphttpserver 或文件列出的其他 provider 是否符合目標編譯器與部署型態。這個順序能把路由 API、編譯時選擇和執行時監聽埠分開驗證,也能清楚辨識問題來自程式碼還是 provider。README 列出 WebSocket、SSE、生命週期鉤子與優雅關閉等主題,但沒有在素材中提供效能基準,因此本文只把它們視為文件範圍,不延伸成容量承諾。

部署時還要把自託管與宿主管理分開看待:Console、VCL、Daemon、LCL 和 HTTPApplication 是應用程式持有 socket 的路徑,Apache 模組、ISAPI、CGI 與 FastCGI 則把 socket 交給外部伺服器。這個差異會改變編譯條件、程序生命週期和關閉責任,不能只依路由範例做判斷。

編輯結論

適合需要 HashLoad/horse README 所列能力、且能維護其依賴的人;不適合把未文件化的功能當成保證。先用 horse 的實際入口完成最小流程,核對輸出、錯誤與目標環境相容性,再決定導入範圍。

官方來源

  1. Official README
  2. Project repository
  3. Release notes
社群筆記

社群筆記