61 lines
3.7 KiB
Markdown
61 lines
3.7 KiB
Markdown
# 🚀 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 呈现命令行数据。 |