# 🚀 Rtty 项目设计总结与架构指南 ## 📝 一句话描述 > **Rtty 是一款基于 Rust 与 Flutter 构建的高性能、跨平台虚拟终端系统,通过服务端状态保持与多端解耦渲染,实现 PC 端工业级 ANSI 兼容与移动端原生语义化重排。** --- ## 🏗️ 系统整体架构图 ``` ┌───────────────────────────────┐ │ Rtty Server (Rust 后端) │ │ • portable-pty (进程/Shell) │ │ • alacritty_terminal (真相源)│ └───────────────┬───────────────┘ │ WebSocket (JSON / ANSI 字节流) │ ┌─────────────────────────┴─────────────────────────┐ ▼ ▼ ┌───────────────────────────────┐ ┌───────────────────────────────┐ │ Rtty Desktop (PC 客户端) │ │ Rtty Mobile (移动客户端) │ │ • flutter_alacritty (FFI) │ │ • Flutter Native Controls │ │ • Canvas 经典 ANSI 网格 │ │ • ListView + RichText 重排 │ │ • 100% 工业级 ANSI 兼容 │ │ • 自适应换行 / 卡片化 UI │ └───────────────────────────────┘ └───────────────────────────────┘ ``` --- ## 🛠️ 核心组件与职责划分 ### 1. **服务端内核 (`rtty-server`)** * **`portable-pty`**:负责底层的 POSIX/Windows 伪终端创建、子进程(Shell/Bash/Zsh)拉起与文件描述符读写。 * **`alacritty_terminal`**:作为整个系统的“真相源 (Source of Truth)”,在内存中实时解析 ANSI 序列,维护 2D 屏幕网格(Grid)、光标位置及历史回滚缓冲区,同时提供断线重连时的快照恢复(Dump Screen Snapshot)。 * **`WebSocket (Axum/Tokio)`**:负责与各终端建立双向实时通信,分发事件流与控制信号。 ### 2. **桌面端渲染管线 (`rtty-desktop`)** * **`flutter_alacritty` (Rust FFI 绑定)**:PC 端放弃纯 Dart 的轻量级解析,直接调用本地 C-Bindings 共享 `alacritty_terminal` 的 Rust 渲染引擎。 * **渲染特性**:Canvas 纯网格高效绘制,保持对 `vim`、`htop`、`tmux` 等全屏 ANSI 软件的 100% 工业级兼容与真彩显示。 ### 3. **移动端渲染管线 (`rtty-mobile`)** * **Flutter Native 组件重排**:移动端抛弃传统 2D 字符网格,采用语义化数据拆解。 * **渲染特性**: * **命令与输出**:封装为 `ListView` 卡片,支持文本按词软换行(Word Wrap),彻底消除横向滚动条与小字号看不清的痛点。 * **键盘与交互**:吸底 Command Input 配合移动端专属快捷键工具栏(Keybar)。 --- ## 💡 Rtty 的三大核心设计优势 1. **状态与渲染解耦**:服务端 Rust 负责维持单一终端状态,客户端按平台特性自由渲染。 2. **前后端内核统一**:后端与 PC 端共享 `alacritty_terminal` 引擎,解析行为 100% 绝对一致。 3. **移动端体验革新**:告别画面缩放与 TUI 错乱,用 Native UI 呈现命令行数据。