Skip to content

Ronifue/peershare

Repository files navigation

PeerShare

基于 WebRTC 的极简点对点文件传输工具
无需服务器中转 · 无需注册登录 · 部署完成,打开即用


📸 截图

首页 首页 - 创建或加入房间

传输中 传输中 - 实时进度显示


⚙️ 配置指南

修改端口号

默认端口为 3001。您可以通过以下两种方式修改:

  1. 环境变量(推荐)

    在启动时设置 PORT 环境变量:

    # Linux/macOS
    PORT=8080 bun run start
    
    # Windows (PowerShell)
    $env:PORT=8080; bun run start
  2. 修改配置文件

    直接编辑 src/server/config.ts 文件:

    export const SERVER_CONFIG = {
      PORT: 3001, // 修改此处
      // ...
    }

特性

  • 纯 P2P 传输 — 文件数据直接在浏览器之间传输,服务器仅负责信令协商,不经手任何文件内容
  • 零配置 — 一方创建房间获得 6 位数字房间码,另一方输入即可连接
  • 断点续传 — 传输中断后自动恢复,基于 IndexedDB 持久化进度,支持跨会话续传
  • 完整性校验 — 块级与文件级双重校验,缺块自动补传,确保传输零损坏
  • 背压控制 — 事件驱动 + 轮询自动回退的双模式背压机制,64KB 分块流式传输,避免内存溢出
  • 分级重连 — ICE 重启 → 连接重建 → 指数退避,最大程度保障传输连续性
  • 多文件队列 — 支持批量选择文件,串行有序传输
  • 隐私安全 — 数据不经过任何第三方服务器,传输链路由 WebRTC 加密保护

技术栈

层级 技术
前端 React 18 + TypeScript
通信 原生 WebRTC DataChannel
信令 Bun WebSocket
运行时 Bun
构建 Bun Bundler

快速开始

环境要求

安装与运行

# 克隆仓库
git clone https://github.com/Ronifue/peershare.git
cd peershare

# 安装依赖
bun install

# 开发模式(热重载)
bun run dev

# 生产构建
bun run build

# 启动生产服务
bun run start

开发服务器默认监听 http://localhost:3001

使用方式

  1. 打开 PeerShare 页面
  2. 发送方:点击「创建房间」,获得 6 位房间码
  3. 接收方:输入房间码,点击「加入房间」
  4. 连接建立后,发送方选择文件即可开始传输

项目结构

peershare/
├── src/
│   ├── client/          # React 前端
│   │   ├── App.tsx      # 应用入口与状态管理
│   │   ├── components/  # UI 组件
│   │   ├── webrtc*.ts   # WebRTC 连接与信令
│   │   ├── transfer-*.ts # 传输协议(发送/接收/续传/校验)
│   │   └── send-queue.ts # 多文件发送队列
│   ├── common/          # 前后端共享模块
│   │   ├── config.ts    # 统一配置(STUN/ICE/传输参数)
│   │   ├── types.ts     # 类型定义
│   │   └── structured-event.ts # 结构化事件协议
│   └── server/          # Bun 信令服务器
│       └── index.ts     # WebSocket 信令处理
├── public/              # 静态资源与构建输出
├── e2e/                 # Playwright 端到端测试
├── tests/               # 单元测试
└── scripts/             # 构建脚本

开发命令

bun run dev        # 开发模式,监听文件变化自动重启
bun run build      # 生产构建
bun run start      # 启动生产服务
bun run test       # 运行单元测试
bun run test:e2e   # 运行端到端测试
bun run typecheck  # TypeScript 类型检查

工作原理

  1. 信令阶段:双方通过 WebSocket 交换 SDP Offer/Answer 和 ICE Candidate,完成 NAT 穿透协商
  2. 传输阶段:建立 WebRTC DataChannel 后,文件以 64KB 分块流式传输,全程 P2P 直连
  3. 可靠性保障:背压控制防止缓冲区溢出,断线后自动分级重连,支持断点续传和完整性校验

浏览器兼容性

支持所有现代浏览器:

  • Chrome / Edge 80+
  • Firefox 80+
  • Safari 15+

注意:WebRTC P2P 连接依赖 NAT 类型。对称型 NAT 环境下可能无法直连(本项目仅使用 STUN,并未配置 TURN 中继)。

许可证

MIT LICENSE

特别感谢

About

基于 WebRTC 的极简 P2P 文件传输工具,无需服务器中转,6 位房间码即连即用

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors