You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.0 KiB
markdown
124 lines
3.0 KiB
markdown
# Flash Send
|
|
|
|
跨平台局域网文件传输与聊天应用,基于 Tauri 2 + Vue 3 + Rust 构建。
|
|
|
|
## 功能特性
|
|
|
|
- 🔍 **局域网设备发现** - UDP 广播自动发现同一网络内的设备
|
|
- 💬 **实时聊天** - WebSocket 实现的低延迟文本消息
|
|
- 📁 **文件传输** - HTTPS 加密传输,支持大文件
|
|
- 🔒 **安全通信** - TLS 加密所有通信,自签名证书
|
|
- 💾 **历史记录** - SQLite 本地存储聊天和传输记录
|
|
- 🎨 **现代 UI** - 扁平化设计,参考微信/LocalSend 风格
|
|
|
|
## 技术栈
|
|
|
|
### 后端 (Rust)
|
|
- **Tauri 2** - 跨平台桌面应用框架
|
|
- **Tokio** - 异步运行时
|
|
- **Rustls** - TLS 加密
|
|
- **Axum** - HTTP 服务
|
|
- **tokio-tungstenite** - WebSocket
|
|
- **rusqlite** - SQLite 数据库
|
|
|
|
### 前端 (TypeScript)
|
|
- **Vue 3** - 响应式 UI 框架
|
|
- **Pinia** - 状态管理
|
|
- **Vue Router** - 路由管理
|
|
- **TailwindCSS** - 样式框架
|
|
- **Lucide Icons** - 图标库
|
|
|
|
## 项目结构
|
|
|
|
```
|
|
flash-send/
|
|
├── src/ # Vue 前端源码
|
|
│ ├── pages/ # 页面组件
|
|
│ ├── components/ # UI 组件
|
|
│ ├── stores/ # Pinia 状态管理
|
|
│ ├── api/ # Tauri API 封装
|
|
│ ├── hooks/ # Vue Hooks
|
|
│ ├── types/ # TypeScript 类型
|
|
│ └── router/ # 路由配置
|
|
├── src-tauri/ # Rust 后端源码
|
|
│ └── src/
|
|
│ ├── discovery/ # UDP 设备发现
|
|
│ ├── websocket/ # WebSocket 聊天
|
|
│ ├── http/ # HTTP 文件传输
|
|
│ ├── tls/ # TLS 加密
|
|
│ ├── database/ # SQLite 数据库
|
|
│ ├── models/ # 数据模型
|
|
│ ├── commands/ # Tauri 命令
|
|
│ └── utils/ # 工具函数
|
|
└── public/ # 静态资源
|
|
```
|
|
|
|
## 开发环境
|
|
|
|
### 前置要求
|
|
- Node.js 18+
|
|
- Rust 1.70+
|
|
- pnpm 或 npm
|
|
|
|
### 安装依赖
|
|
|
|
```bash
|
|
# 安装前端依赖
|
|
npm install
|
|
|
|
# Rust 依赖会在首次构建时自动安装
|
|
```
|
|
|
|
### 开发模式
|
|
|
|
```bash
|
|
npm run tauri dev
|
|
```
|
|
|
|
### 构建发布
|
|
|
|
```bash
|
|
npm run tauri build
|
|
```
|
|
|
|
## 通信协议
|
|
|
|
### UDP 设备发现 (端口 53317)
|
|
```json
|
|
{
|
|
"version": 1,
|
|
"device": {
|
|
"deviceId": "uuid",
|
|
"deviceName": "设备名",
|
|
"ip": "192.168.1.100",
|
|
"wsPort": 53318,
|
|
"httpPort": 53319,
|
|
"capabilities": ["text", "image", "file"]
|
|
},
|
|
"packetType": "announce|query|response|goodbye"
|
|
}
|
|
```
|
|
|
|
### WebSocket 消息 (端口 53318)
|
|
```json
|
|
{
|
|
"id": "uuid",
|
|
"type": "text|image|event|ack|ping|pong",
|
|
"content": "消息内容",
|
|
"from": "发送者设备ID",
|
|
"to": "接收者设备ID",
|
|
"timestamp": 1700000000,
|
|
"status": "pending|sent|delivered|read|failed"
|
|
}
|
|
```
|
|
|
|
### HTTP 文件传输 (端口 53319)
|
|
- `POST /upload` - 上传文件
|
|
- `GET /file/:id` - 下载文件
|
|
- `GET /file/:id/info` - 获取文件信息
|
|
- `GET /health` - 健康检查
|
|
|
|
## 许可证
|
|
|
|
MIT License
|