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. 安装依赖
cd server
pnpm install
2. 启动服务器
开发模式(支持热重载):
pnpm dev
生产模式:
pnpm start
服务器默认运行在 http://127.0.0.1:3000
二、部署桌面客户端
1. 安装依赖
pnpm install
2. 开发模式
启动前端开发服务器和 Tauri 开发窗口:
pnpm tauri dev
3. 构建生产版本
构建可分发的桌面应用:
pnpm tauri build
构建产物位于 src-tauri/target/release/bundle/ 目录,包含:
- Windows:
.exe安装程序 - macOS:
.dmg安装包 - Linux:
.AppImage或.deb包
4. 仅构建前端
如果只需要构建前端资源:
pnpm build
三、使用说明
- 启动服务器 - 先启动信令服务器
- 启动客户端 - 运行桌面应用
- 连接服务器 - 在客户端输入服务器地址并连接
- 加入房间 - 输入房间ID和昵称加入房间
- 连接用户 - 点击用户列表中的"连接"按钮建立 P2P 连接
- 传输文件 - 选择文件并发送给已连接的用户
网络要求
- 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
- Vue - Official - Vue 语言支持
- Tauri - Tauri 支持
- rust-analyzer - Rust 语言支持
许可证
MIT
Description
Languages
JavaScript
53.5%
Vue
43.6%
Rust
2.3%
HTML
0.6%