Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BitStorm Logo

BitStorm

局域网 P2P 文件分发系统

Go Version React Version TypeScript Wails Vite Tailwind License


简介

BitStorm 是一个基于 Wails v2 构建的局域网 P2P 文件分发桌面应用。管理员选择文件或文件夹后,通过 UDP 广播自动发现局域网内的客户端,利用 P2P 网状拓扑将文件高速分发到所有节点。客户端之间互相共享已下载的分片,突破传统一对多传输的带宽瓶颈,大幅提升大规模文件分发效率。

核心场景

  • 机房 / 实验室多台机器批量部署软件包
  • 局域网内大文件快速分享
  • 文件夹同步分发到多台设备

特性

  • P2P 网状传输 — 客户端下载完分片后自动成为 Seeder,其他节点可从中拉取,充分利用全网带宽
  • Block-level 流水线 — 1MB 分片拆分为 16KB 块,多节点并行竞争下载同一分片
  • 稀有度优先算法 — 始终优先下载全网最少的分片,最大化分片分布均匀度
  • RTT 自适应并发 — 根据网络延迟动态调整并发窗口(LAN 下可达 64 并发)
  • Endgame 模式 — 最后一批分片时所有持有者同时竞争,避免尾端延迟
  • 断点续传 — .bsfd_parts 持久化存储,重连后自动跳过已下载分片
  • TCP 多路复用 — 每对等节点 4 条 TCP 连接,FNV hash 负载均衡
  • 文件夹分发 — 自动打包为 tar 归档后分片,客户端完成自动解压
  • 种子文件 — 支持导出 .bsfd 文件,客户端可预加载成为纯 Seeder
  • Windows 深度适配 — 自动添加防火墙规则、端口冲突检测、跨盘符空间检查

架构

┌────────────────────────────────────────────┐
│                  Frontend                  │
│        React 19 + TypeScript + Vite        │
│      Tailwind CSS + React Router           │
│                 Wails IPC                  │
├─────────────────────┼──────────────────────┤
│                Backend (Go)                │
│                                            │
│  ┌─────────┐  ┌──────────┐  ┌───────────┐  │
│  │ cmd/    │  │ internal/│  │ protocol/ │  │
│  │ admin   │  │ transfer │  │   BSFD    │  │
│  │ client  │  │ chunk    │  │   Codec   │  │
│  │ cli     │  │ discovery│  │   Types   │  │
│  └─────────┘  │ config   │  └───────────┘  │
│               │ utils    │                 │
│               └──────────┘                 │
├────────────────────────────────────────────┤
│                  Network                   │
│            UDP 26931 (Discovery)           │
│            TCP 26932 (Transfer)            │
└────────────────────────────────────────────┘

项目结构

BitStorm/
├── cmd/
│   ├── admin/          # 管理员端 Wails 应用(文件选择、分发控制)
│   ├── client/         # 客户端 Wails 应用(自动发现、P2P 下载)
│   ├── admin_cli/      # 管理员命令行工具
│   └── client_cli/     # 客户端命令行工具
├── frontend/           # 主应用前端(模式选择 + 路由)
├── internal/
│   ├── chunk/          # 文件分片、SHA-256 校验、LRU 缓存、文件组装
│   ├── config/         # 常量与参数配置
│   ├── discovery/      # UDP 广播与监听,节点发现
│   ├── transfer/       # TCP 连接池、消息路由、RTT 追踪
│   └── utils/          # 调试日志、端口管理
├── protocol/           # BSFD 帧协议定义与编解码
├── build/              # Wails 构建资源(图标、安装器脚本)
├── wails.json          # Wails 项目配置
└── go.mod

BSFD 帧协议

所有网络通信使用自定义的 BSFD(Binary Simple Frame Distribution)二进制帧格式:

┌──────────┬──────┬───────────┬──────────────┐
│ "BSFD"   │ Type │ PayloadLen│   Payload    │
│  4 bytes │ 1 B  │  4 bytes  │   N bytes    │
└──────────┴──────┴───────────┴──────────────┘
类型 值 方向 说明
Heartbeat 0x01 All ↔ All (UDP) 节点发现,携带 ChunkBitmap
Hello 0x02 Client → Admin (TCP) TCP 握手
FileInfo 0x03 Admin → Client 文件元数据
StartDist 0x04 Admin → Client 开始分发
ChunkRequest 0x10 Peer ↔ Peer 请求分片
ChunkDataBin 0x12 Peer ↔ Peer 二进制分片数据
BlockRequest 0x13 Peer ↔ Peer 请求分片内块
BlockDataBin 0x14 Peer ↔ Peer 二进制块数据
Cancel 0x30 Admin → Client 取消分发
Finish 0x31 Admin → Client 分发完成
KeepAlive 0xFE Peer ↔ Peer TCP 保活

快速开始

环境要求

  • Go ≥ 1.25
  • Node.js ≥ 18
  • Wails CLI — go install github.com/wailsapp/wails/v2/cmd/wails@latest

安装与运行

# 克隆仓库
git clone https://github.com/CuiCuiSha233/bitstorm.git
cd bitstorm

# 安装前端依赖
cd frontend && npm install && cd ..

# 开发模式运行(热重载)
wails dev

# 构建生产版本
wails build

使用方式

  1. 启动 管理员端 — 选择文件或文件夹,设置客户端保存路径
  2. 启动 客户端 — 自动通过 UDP 发现管理员并建立 TCP 连接
  3. 管理员点击「开始分发」,所有客户端开始 P2P 下载
  4. 客户端之间互相共享已下载分片,全程可视化监控

技术栈

层级 技术
桌面框架 Wails v2
后端语言 Go
前端框架 React 19 + TypeScript 5.6
构建工具 Vite 7
CSS 框架 Tailwind CSS 4.3
路由 React Router DOM 7
图表 Recharts 3.9

License

MIT

About

基于 Wails v2 的局域网 P2P 文件分发系统 — 管理员选择文件,UDP 广播发现节点,客户端网状拓扑互相共享分片,突破一对多带宽瓶颈。

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages