p2p-file-transfer/README.md
2026-01-12 04:53:21 +08:00

154 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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