Replicant Detector: A Common Lisp and Datastar Demo

Replicant Detector 是一个技术演示项目,它集成了 Common LispDatastarBKNR datastore,旨在展示一种高性能、响应式的 Web 应用架构。该项目作为 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 向客户端推送更新。为了防止阻塞事件循环,开发者通过 Clack 将修改集成到了 Woo Web 服务器中,以支持用户通道 (user channels)。
  • 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) 阶段,旨在展示这些工具在现代响应式 Web 环境中的可行性。

Sources