用途
Robius App Architecture 技能用于指导 Makepad 应用的架构设计,特别是需要与异步后端集成的场景。其最佳实践来源于 Robrix(Matrix 聊天客户端,具有复杂的同步/异步与后台订阅)和 Moly(AI 聊天应用,跨平台原生 + WASM,使用流式 API)两个生产级代码库。
当你在构建带异步后端集成的 Makepad 应用、设计 Makepad 中的同步/异步通信模式,或搭建 Robius 风格的应用结构时,可以使用本技能。相关关键词包括 robrix、robius、makepad app structure、async makepad、tokio makepad。
主要能力
技能提供了一套核心架构模式,将 UI 线程(Makepad)与 Tokio 异步运行时分离:
- 请求提交:UI 线程通过
submit_async_request()将类型化的AppRequest发送到 MPSC 通道(REQUEST_SENDER)。 - 工作线程:Tokio 运行时中的
worker_task接收请求,为每个请求派生异步任务,并通过Cx::post_action()将结果回传 UI 线程。 - 无锁更新队列:对于高频后台更新,使用
crossbeam_queue::SegQueue存放DataUpdate,并调用SignalToUI::set_ui_signal()唤醒 UI 线程。 - 状态传递:通过
Scope::with_data()在控件树中传递共享的AppState。 - 启动与关闭流程:启动时初始化日志、应用数据目录、加载持久化状态、更新 UI 可见性并启动异步运行时;关闭时保存窗口几何信息与应用状态。
技能还包含生产级异步模式参考,位于 _base/ 目录:08-async-loading(带加载状态的异步数据加载)、09-streaming-results(使用 SignalToUI 的增量结果)、13-tokio-integration(完整的 Tokio 运行时集成)。
使用方式
技能给出了具体的代码结构示例,包括:
- 顶层 App 定义(
live_design!、App结构体、LiveRegister、LiveHook、AppMain实现)。 - Tokio 运行时集成:静态运行时初始化
start_async_runtime()、请求提交submit_async_request()、工作线程worker_task()。 - 无锁更新队列模式:
enqueue_update()与控件handle_event中对Event::Signal的轮询处理。 - 启动序列(
handle_startup)与关闭序列(Event::Shutdown)。
最佳实践包括:关注点分离(UI 逻辑留在主线程,异步操作放入 Tokio 运行时)、使用类型化枚举表示请求与动作、高频更新使用无锁队列、入队后始终调用 SignalToUI::set_ui_signal()、异步任务结果使用 Cx::post_action()、通过 Scope::with_data() 传递共享状态、在 live_register() 中先注册基础控件再注册依赖模块。
参考文件包括:references/tokio-integration.md(Robrix 的 Tokio 运行时模式)、references/channel-patterns.md(Robrix 的通道通信模式)、references/moly-async-patterns.md(Moly 的跨平台异步模式,涉及 PlatformSend trait、UiRunner、AbortOnDropHandle、ThreadToken、spawn() 等)。
适用场景
- 构建需要异步后端集成的 Makepad 应用。
- 设计 Makepad 中 UI 线程与异步运行时之间的通信模式。
- 搭建 Robius 风格的应用结构。
- 需要处理高频后台更新、流式结果或跨平台(原生 + WASM)异步逻辑的项目。
限制
资料未提供该技能的收费、价格、平台支持范围、实际效果或具体安装步骤等信息,这些内容暂未提供。