Replicant Detector: A Common Lisp and Datastar Demo

Replicant Detector 是一個技術演示,整合了 Common LispDatastar 以及 BKNR datastore,旨在展示一種高效能、反應式的網頁應用程式架構。該專案作為 Common Lisp 版 Datastar SDK 的演示,透過單一 GET 串流與多個 POST 指令來實作命令查詢職責分離 (CQRS) 模式。

Architecture and Technical Stack

該應用程式利用了一套特定的技術來實現即時更新與持久化儲存:

  • Common Lisp: 用於後端邏輯的核心程式語言。
  • Datastar: 一個用於管理前端反應性的超媒體驅動框架。
  • BKNR Datastore: 作為應用程式數據的持久化儲存層。
  • CQRS Pattern: 遵循「Datastar Tao」,應用程式將讀取與寫入操作分離。它使用單一 GET 串流進行更新,並使用多個 POST 指令進行狀態變更。

Real-Time Updates and SSE Implementation

為了支持應用程式的反應性,開發者對 Common Lisp 生態系統進行了幾項底層增強:

  • Server-Sent Events (SSE): 應用程式使用 SSE 向客戶端推送更新。為了防止阻塞事件迴圈,開發者將修改整合至 Woo web server (透過 Clack) 以支持用戶頻道 (user channels)。
  • Event Pool: 使用用戶頻道讓應用程式能夠利用事件池 (event pool),這對於 CQRS 實作中在不阻塞伺服器的情況下發送通知至關重要。
  • Brotli Compression: 作為開發此演示的副產品,作者創建了一個 cl-brotli 函式庫,為 Common Lisp 提供 Brotli 壓縮支持。

Application Features and Interface

Replicant Detector 的主題設定為 Tyrell Corp Blade Runner Division 的「Replicant Registration Database」。介面提供了一個具備以下功能的即時追蹤系統:

  • Unit Tracking: 一個分類為型號 (Nexus-6, Nexus-7, Nexus-8)、角色 (例如:Combat, Infiltrator, Loader) 與狀態 (At-Large 或 Retired) 的複製人資料庫。
  • Orbital Tracking: 一個使用基於 SVG 的等距圓柱投影 (利用 GeoLite2-City 數據) 的視覺化地圖,用以顯示最後已知位置。
  • Field Agent Activity Log: 一個即時日誌,追蹤特務的身分辨識與退役行動 (例如:「Agent S8XLQ08416 (United States): RETIRE N6FAB61216」)。

Development Context

此專案是為 Common Lisp 建立 Datastar SDK 以及在 lambda-combine.net 的「hyper-guide」上提供配套互動式指南的更廣泛工作的一部分。作者指出,此實作目前仍處於開發中 (WIP) 階段,旨在展示這些工具在現代反應式網頁環境中的可行性。

Sources