154 lines
4.2 KiB
Markdown
154 lines
4.2 KiB
Markdown
# P2P File Transfer
|
||
|
||
一个基于 WebRTC 的点对点文件传输应用,支持跨平台桌面部署。
|
||
|
||
## 项目简介
|
||
|
||
本项目实现了一个无需经过服务器的 P2P 文件传输系统。文件直接在用户之间通过 WebRTC 数据通道传输,服务器仅用于信令交换(帮助建立 P2P 连接),保证了传输的高效性和隐私性。
|
||
|
||
### 主要特性
|
||
|
||
- **点对点传输** - 文件直接在用户之间传输,不经过服务器
|
||
- **房间系统** - 用户可以加入房间,查看并连接房间内的其他用户
|
||
- **实时传输** - 基于 WebRTC DataChannel 实现高速文件传输
|
||
- **传输管理** - 实时显示传输进度、状态(发送中/接收中/已完成/失败)
|
||
- **传输控制** - 接收方可接受或拒绝文件传输请求
|
||
- **多语言支持** - 支持中文和英文界面切换
|
||
- **跨平台** - 基于 Tauri 构建,支持 Windows、macOS 和 Linux
|
||
|
||
## 技术栈
|
||
|
||
### 前端
|
||
|
||
- **Vue 3** - 使用 Composition API 和 `<script setup>` 语法
|
||
- **Tauri 2** - 跨平台桌面应用框架(基于 Rust)
|
||
- **Socket.io-client** - WebSocket 客户端,用于信令服务器通信
|
||
- **WebRTC** - 实现点对点数据传输
|
||
- **vue-i18n** - 国际化支持
|
||
|
||
### 后端服务器
|
||
|
||
- **Node.js** - 运行时环境
|
||
- **Koa 2** - Web 框架
|
||
- **Socket.io** - WebSocket 服务器,用于信令交换
|
||
- **@koa/cors** - CORS 支持
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
p2p-transfer/
|
||
├── src/ # Vue 前端源码
|
||
│ ├── components/ # Vue 组件
|
||
│ ├── composables/ # 组合式函数(WebRTC、文件传输等)
|
||
│ ├── i18n/ # 国际化配置
|
||
│ └── utils/ # 工具函数
|
||
├── server/ # Node.js 后端服务器
|
||
│ ├── routes/ # 路由
|
||
│ └── index.js # 服务器入口
|
||
├── src-tauri/ # Tauri 配置(Rust)
|
||
└── public/ # 静态资源
|
||
```
|
||
|
||
## 部署方式
|
||
|
||
### 一、部署信令服务器
|
||
|
||
信令服务器用于帮助客户端建立 P2P 连接,不存储或转发文件数据。
|
||
|
||
#### 1. 安装依赖
|
||
|
||
```bash
|
||
cd server
|
||
pnpm install
|
||
```
|
||
|
||
#### 2. 启动服务器
|
||
|
||
开发模式(支持热重载):
|
||
|
||
```bash
|
||
pnpm dev
|
||
```
|
||
|
||
生产模式:
|
||
|
||
```bash
|
||
pnpm start
|
||
```
|
||
|
||
服务器默认运行在 `http://127.0.0.1:3000`
|
||
|
||
#### 二、部署桌面客户端
|
||
|
||
#### 1. 安装依赖
|
||
|
||
```bash
|
||
pnpm install
|
||
```
|
||
|
||
#### 2. 开发模式
|
||
|
||
启动前端开发服务器和 Tauri 开发窗口:
|
||
|
||
```bash
|
||
pnpm tauri dev
|
||
```
|
||
|
||
#### 3. 构建生产版本
|
||
|
||
构建可分发的桌面应用:
|
||
|
||
```bash
|
||
pnpm tauri build
|
||
```
|
||
|
||
构建产物位于 `src-tauri/target/release/bundle/` 目录,包含:
|
||
|
||
- Windows: `.exe` 安装程序
|
||
- macOS: `.dmg` 安装包
|
||
- Linux: `.AppImage` 或 `.deb` 包
|
||
|
||
#### 4. 仅构建前端
|
||
|
||
如果只需要构建前端资源:
|
||
|
||
```bash
|
||
pnpm build
|
||
```
|
||
|
||
### 三、使用说明
|
||
|
||
1. **启动服务器** - 先启动信令服务器
|
||
2. **启动客户端** - 运行桌面应用
|
||
3. **连接服务器** - 在客户端输入服务器地址并连接
|
||
4. **加入房间** - 输入房间ID和昵称加入房间
|
||
5. **连接用户** - 点击用户列表中的"连接"按钮建立 P2P 连接
|
||
6. **传输文件** - 选择文件并发送给已连接的用户
|
||
|
||
## 网络要求
|
||
|
||
- **STUN 服务器** - 应用使用 Google 的公共 STUN 服务器(`stun.l.google.com:19302`)帮助穿透 NAT
|
||
- **局域网传输** - 在同一局域网内传输效果最佳
|
||
- **公网传输** - 需要配置 TURN 服务器以支持更复杂的网络环境
|
||
|
||
## 开发环境要求
|
||
|
||
- **Node.js** >= 18(项目开发使用v20.19.6)
|
||
- **pnpm** >= 8(项目开发使用10.28.0)
|
||
- **Rust** >= 1.70(用于 Tauri 构建)
|
||
- **系统依赖**:
|
||
- Windows: WebView2, Visual Studio C++ Build Tools
|
||
- macOS: Xcode Command Line Tools
|
||
- Linux: webkit2gtk, libayatana-appindicator3
|
||
|
||
## 推荐的 IDE 设置
|
||
|
||
- [VS Code](https://code.visualstudio.com/)
|
||
- [Vue - Official](https://marketplace.visualstudio.com/items?itemName=Vue.volar) - Vue 语言支持
|
||
- [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) - Tauri 支持
|
||
- [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) - Rust 语言支持
|
||
|
||
## 许可证
|
||
|
||
MIT
|