MeshKit 是一个基于 WebRTC 的去中心化 P2P 协作平台,采用 Monorepo 架构,支持多平台部署。系统由三个主要客户端(Web、Desktop、Mobile)和一个轻量级信令服务器组成。
- 去中心化 - 数据直接在客户端之间传输,减少服务器依赖
- 安全至上 - 端到端加密,传输层加密,多层安全保护
- 跨平台 - 统一核心逻辑,适配多种平台
- 模块化 - 清晰的模块划分,便于维护和扩展
- 可扩展 - 易于添加新功能和新平台
┌─────────────────────────────────────────────────────────────────────┐
│ MeshKit 系统 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Web 客户端 │ │ Desktop 客户端 │ │ Mobile 客户端 │ │
│ │ │ │ │ │ │ │
│ │ React + Vite │ │ Electron │ │ React Native │ │
│ │ 浏览器运行 │ │ 跨平台桌面应用 │ │ iOS/Android │ │
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │ │
│ └────────────────────┼─────────────────────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ @meshkit/core │ │
│ │ 核心业务逻辑 │ │
│ └───────┬───────┘ │
│ │ │
│ ┌────────────────────┼────────────────────┐ │
│ │ │ │ │
│ ┌────▼─────┐ ┌──────▼──────┐ ┌─────▼──────┐ │
│ │ P2P 管理 │ │ 文件传输 │ │ CRDT 同步 │ │
│ │ │ │ │ │ │ │
│ │ PeerJS │ │ WebRTC DC │ │ Yjs │ │
│ │ WebRTC │ │ 流式传输 │ │ 实时协同 │ │
│ └────┬─────┘ └──────┬──────┘ └─────┬──────┘ │
│ │ │ │ │
└───────────┼───────────────────┼────────────────────┼───────────────┘
│ │ │
│ │ │
│ ┌──────▼──────┐ │
└────────────► 信令服务器 ◄─────────────┘
│ │
│ WebSocket │
│ PeerServer │
└─────────────┘
设备发现 & P2P 连接协商
┌───────────────────────────────────────────────────────────────┐
│ WebRTC P2P 直连 │
│ │
│ 设备A 设备B │
│ ┌─────┐ ┌─────┐ │
│ │ │ ←──── DTLS/SRTP 加密通道 ────→ │ │ │
│ │ Web │ │ Web │ │
│ │ │ ←──── 文件/消息/CRDT ────→ │ │ │
│ └─────┘ └─────┘ │
│ │
│ 不经过服务器 - 点对点直接传输 │
└───────────────────────────────────────────────────────────────┘
MeshKit/
├── packages/ # 客户端包
│ ├── core/ # 核心业务逻辑(共享)
│ │ ├── src/
│ │ │ ├── p2p/ # P2P 连接管理
│ │ │ ├── file/ # 文件传输
│ │ │ ├── sync/ # CRDT 同步
│ │ │ ├── crypto/ # 加密通讯
│ │ │ ├── device/ # 设备管理
│ │ │ └── events/ # 事件总线
│ │ └── package.json
│ │
│ ├── web/ # Web 应用
│ │ ├── src/
│ │ │ ├── pages/ # 页面组件
│ │ │ ├── components/ # UI 组件
│ │ │ ├── hooks/ # React Hooks
│ │ │ └── store/ # 状态管理
│ │ └── package.json
│ │
│ ├── desktop/ # Desktop 应用
│ │ ├── src/
│ │ │ ├── main/ # Electron 主进程
│ │ │ ├── preload/ # 预加载脚本
│ │ │ └── renderer/ # 渲染进程(复用 Web)
│ │ └── package.json
│ │
│ └── mobile/ # Mobile 应用(规划中)
│ └── ...
│
├── apps/ # 应用服务
│ └── signaling/ # 信令服务器
│ ├── src/
│ │ ├── ws/ # WebSocket 服务
│ │ ├── peer/ # PeerServer
│ │ └── index.ts # 入口
│ └── package.json
│
├── docs/ # 文档
├── package.json # 根配置
├── pnpm-workspace.yaml # pnpm 工作空间
└── turbo.json # Turborepo 配置
| 技术 | 版本 | 用途 | 说明 |
|---|---|---|---|
| TypeScript | 5.3+ | 开发语言 | 类型安全,完整类型定义 |
| React | 18.2 | UI 框架 | 声明式 UI,组件化开发 |
| Vite | 5.0+ | 构建工具 | 快速的开发服务器和构建 |
| Zustand | 4.4+ | 状态管理 | 轻量级状态管理方案 |
| TailwindCSS | 3.3+ | 样式框架 | 实用优先的 CSS 框架 |
| React Router | 6.x | 路由管理 | 客户端路由 |
| 技术 | 版本 | 用途 | 说明 |
|---|---|---|---|
| WebRTC | - | P2P 通讯 | 浏览器原生 P2P 能力 |
| PeerJS | 1.5+ | WebRTC 封装 | 简化 WebRTC 连接建立 |
| Yjs | 13.6+ | CRDT 同步 | 无冲突协同编辑 |
| y-webrtc | 10.3+ | Yjs WebRTC | Yjs 的 WebRTC 传输层 |
| 技术 | 版本 | 用途 | 说明 |
|---|---|---|---|
| libsodium | 0.7+ | 端到端加密 | NaCl 加密库(军事级) |
| WebCrypto API | - | 浏览器加密 | 浏览器原生加密 API |
| DTLS/SRTP | - | 传输层加密 | WebRTC 内置加密 |
| 技术 | 版本 | 用途 | 说明 |
|---|---|---|---|
| Electron | 28.0+ | 桌面应用 | 跨平台桌面应用框架 |
| Electron Builder | 24.0+ | 打包工具 | 多平台打包和发布 |
| React Native | 0.73+ | 移动应用 | 跨平台移动应用(规划中) |
| 技术 | 版本 | 用途 | 说明 |
|---|---|---|---|
| Node.js | 18+ | 运行环境 | JavaScript 运行时 |
| Express | 4.18+ | Web 框架 | 信令服务器框架 |
| ws | 8.x | WebSocket | WebSocket 服务器 |
| peer | 0.6+ | PeerServer | PeerJS 信令服务器 |
| Docker | - | 容器化 | 容器化部署 |
| 技术 | 版本 | 用途 | 说明 |
|---|---|---|---|
| pnpm | 8+ | 包管理 | 快速的包管理器 |
| Turborepo | 1.11+ | Monorepo 工具 | 高效的 Monorepo 构建 |
| ESLint | 8.x | 代码检查 | 代码质量保证 |
| Prettier | 3.x | 代码格式化 | 统一代码风格 |
位置: packages/core/src/p2p/
职责:
- 管理 PeerJS 实例
- 建立和维护 P2P 连接
- 处理连接状态变化
- 重连机制
- 连接质量监控
关键组件:
class P2PManager {
private peer: Peer
private connections: Map<string, DataConnection>
// 初始化 Peer 实例
initialize(peerId?: string): Promise<void>
// 连接到对等设备
connectToPeer(peerId: string): Promise<DataConnection>
// 断开连接
disconnect(peerId: string): void
// 监听连接事件
onConnection(callback: (conn: DataConnection) => void): void
}数据流:
客户端 A 信令服务器 客户端 B
│ │ │
├──── 注册 Peer ID ────►│ │
│ │◄──── 注册 Peer ID ───┤
│ │ │
├──── 请求连接 B ──────►│ │
│ ├──── 转发请求 ───────►│
│ │ │
│◄──── ICE 候选 ────────┤──── ICE 候选 ───────►│
│ │ │
│◄───────────── P2P 直连建立 ─────────────────►│
│ (不经过服务器) │
位置: packages/core/src/file/
职责:
- 文件分片和流式传输
- 传输进度跟踪
- 传输队列管理
- 错误处理和重传
- 传输速度计算
关键组件:
class FileTransferManager {
private chunkSize = 64 * 1024 // 64KB 分片大小
// 发送文件
sendFile(
file: File,
connection: DataConnection,
onProgress: (progress: number) => void
): Promise<void>
// 接收文件
receiveFile(
connection: DataConnection,
onProgress: (progress: number) => void
): Promise<Blob>
// 取消传输
cancelTransfer(transferId: string): void
}文件传输流程:
发送端 接收端
│ │
├── 1. 读取文件 │
├── 2. 分片 (64KB) │
│ │
├── 3. 发送元数据 ───────────────────────►│
│ (文件名、大小、类型) ├── 准备接收缓冲区
│ │
├── 4. 发送分片 1 ────────────────────────►│
├── 5. 发送分片 2 ────────────────────────►│ 接收并组装
├── 6. 发送分片 3 ────────────────────────►│
│ ... │
│ │
├── 7. 发送完成标记 ──────────────────────►│
│ ├── 组装完整文件
│ ├── 触发下载
│◄──── 8. 确认接收 ───────────────────────┤
位置: packages/core/src/sync/
职责:
- 管理 Yjs 文档
- WebRTC 传输提供者
- 本地持久化(IndexedDB)
- 冲突解决(自动)
- 离线支持
关键组件:
class SyncManager {
private ydoc: Y.Doc
private provider: WebrtcProvider
// 初始化同步
initialize(roomName: string): void
// 获取共享类型
getSharedArray<T>(name: string): Y.Array<T>
getSharedMap<T>(name: string): Y.Map<T>
// 监听变化
onUpdate(callback: (update: Uint8Array) => void): void
// 断开连接
destroy(): void
}CRDT 同步机制:
设备 A 设备 B 设备 C
│ │ │
├── 添加便签 "任务1" │ │
├── 生成操作 Op1 │ │
├────────────────────────► │
│ ├── 应用 Op1 │
│ ├────────────────────────►│
│ ├── 应用 Op1
│ │ │
│ ├── 添加便签 "任务2" │
│ ├── 生成操作 Op2 │
│◄──────────────────────── │
├── 应用 Op2 ├────────────────────────►│
│ │ ├── 应用 Op2
│ │ │
结果: 所有设备都有 "任务1" 和 "任务2",顺序一致,无冲突
位置: packages/core/src/crypto/
职责:
- 密钥对生成(ECDH)
- 密钥交换
- 消息加密/解密
- Nonce 管理
- 密钥派生
关键组件:
class CryptoManager {
private keyPair: { publicKey: Uint8Array; secretKey: Uint8Array }
private sharedKeys: Map<string, Uint8Array>
// 生成密钥对
generateKeyPair(): void
// 交换公钥
exchangeKeys(peerId: string, publicKey: Uint8Array): void
// 加密消息
encrypt(message: string, peerId: string): Uint8Array
// 解密消息
decrypt(ciphertext: Uint8Array, peerId: string): string
}端到端加密流程:
Alice Bob
│ │
├── 1. 生成密钥对 │
│ 公钥A, 私钥A ├── 1. 生成密钥对
│ │ 公钥B, 私钥B
│ │
├── 2. 发送公钥A ─────────────────────────►│
│◄──── 3. 发送公钥B ────────────────────────┤
│ │
├── 4. 计算共享密钥 │
│ SharedKey = ECDH(私钥A, 公钥B) ├── 4. 计算共享密钥
│ │ SharedKey = ECDH(私钥B, 公钥A)
│ │
│ (双方计算出相同的 SharedKey) │
│ │
├── 5. 加密消息 "Hello" │
│ Cipher = XSalsa20(SharedKey, "Hello")│
├── 6. 发送密文 ──────────────────────────►│
│ ├── 7. 解密消息
│ │ "Hello" = XSalsa20_Decrypt(SharedKey, Cipher)
位置: packages/core/src/device/
职责:
- 设备发现
- 设备列表维护
- 在线状态跟踪
- 设备元信息管理
- 心跳检测
关键组件:
class DeviceManager {
private devices: Map<string, Device>
// 注册设备
registerDevice(device: Device): void
// 更新设备状态
updateDeviceStatus(peerId: string, status: 'online' | 'offline'): void
// 获取在线设备
getOnlineDevices(): Device[]
// 监听设备变化
onDeviceChange(callback: (devices: Device[]) => void): void
}位置: packages/core/src/events/
职责:
- 模块间通讯
- 事件订阅/发布
- 事件过滤
- 错误事件传播
关键组件:
class EventBus {
private listeners: Map<string, Set<Function>>
// 订阅事件
on(event: string, callback: Function): () => void
// 发布事件
emit(event: string, ...args: any[]): void
// 取消订阅
off(event: string, callback: Function): void
}┌─────────────────────────────────────────────────────────────────────┐
│ 文件传输完整流程 │
└─────────────────────────────────────────────────────────────────────┘
用户操作 应用层 P2P层 WebRTC 对端
│ │ │ │ │
├─ 选择文件 ───────►│ │ │ │
│ ├─ 读取文件 │ │ │
│ ├─ 分片 (64KB) │ │ │
│ │ │ │ │
│ ├─ 发送元数据 ──►│ │ │
│ │ ├─ 发送数据 ─────► │
│ │ │ ├─ DTLS加密 ───►│ 接收元数据
│ │ │ │ │ 准备接收
│ │ │ │ │
│ ├─ 发送分片1 ───►│ │ │
│ │ ├─ 发送分片1 ────► │
│ │ │ ├─ DTLS加密 ───►│ 接收分片1
│ │ │ │ │
│ ├─ 发送分片2 ───►│ │ │
│ │ ├─ 发送分片2 ────► │
│ │ │ ├─ DTLS加密 ───►│ 接收分片2
│ │ │ │ │ 组装...
│ │ ... │ │ │
│ │ │ │ │
│ ├─ 发送完成 ────►│ │ │
│ │ ├─ 发送完成 ─────► │
│ │ │ ├─ DTLS加密 ───►│ 文件完整
│ │ │ │ │ 触发下载
│ │ │ │ │
│ │◄─ 接收确认 ───┤ │ │
│ │ │◄─ 确认消息 ────┤ │
│ │ │ │◄─ DTLS加密 ───┤
│◄─ 显示完成 ───────┤ │ │ │
┌─────────────────────────────────────────────────────────────────────┐
│ 便签同步流程 │
└─────────────────────────────────────────────────────────────────────┘
设备A Yjs CRDT WebRTC Provider 设备B
│ │ │ │
├─ 添加便签 ────────►│ │ │
│ ├─ 生成 Op1 │ │
│ ├─ 更新本地 Doc │ │
│ ├─ 持久化 IndexedDB │ │
│ │ │ │
│ ├─ 广播 Op1 ────────► │
│ │ ├─ WebRTC发送 ──►│
│ │ │ (DTLS加密) │ 接收 Op1
│ │ │ ├─►Yjs应用
│ │ │ │ 更新Doc
│ │ │ │ 更新UI
│ │ │ │
│ │ │◄─ 广播 Op2 ────┤ 编辑便签
│ │◄─ 接收 Op2 ────────┤ (DTLS加密) │
│ 更新UI ◄─────────┤ │ │
│ ├─ 应用 Op2 │ │
│ ├─ 更新 Doc │ │
│ ├─ 持久化 │ │
┌─────────────────────────────────────────────────────────────────────┐
│ 加密聊天流程 │
└─────────────────────────────────────────────────────────────────────┘
Alice CryptoManager WebRTC Bob
│ │ │ │
├─ 连接建立 ──────────►│ │ │
│ ├─ 生成密钥对A │ │
│ │ (公钥A, 私钥A) │ │
│ │ │ │ 生成密钥对B
│ │ │ │ (公钥B, 私钥B)
│ │ │ │
│ ├─ 发送公钥A ────────► │
│ │ ├─ 转发 ────►│ 接收公钥A
│ │ │ │
│ │◄─ 接收公钥B ───────┤ │
│ │ │◄─ 转发 ────┤ 发送公钥B
│ │ │ │
│ ├─ 计算共享密钥 │ │ 计算共享密钥
│ │ ECDH(私钥A, 公钥B)│ │ ECDH(私钥B, 公钥A)
│ │ │ │
├─ 发送消息 "Hi" ─────►│ │ │
│ ├─ 加密 │ │
│ │ XSalsa20+Poly │ │
│ ├─ 发送密文 ─────────► │
│ │ ├─ 转发 ────►│ 接收密文
│ │ │ DTLS加密 │
│ │ │ ├─►解密
│ │ │ │ XSalsa20+Poly
│ │ │ │ "Hi"
│ │ │ │
│ │ │ ├─ 显示 "Hi"
┌───────────────────────────────────────────────────────────────┐
│ 安全层次架构 │
├───────────────────────────────────────────────────────────────┤
│ │
│ 第4层: 应用层安全 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 端到端加密 (E2EE) │ │
│ │ - libsodium (NaCl) │ │
│ │ - XSalsa20 流密码 (256位) │ │
│ │ - Poly1305 消息认证 │ │
│ │ - 仅用于加密聊天功能 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 第3层: 传输层安全 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ WebRTC DTLS/SRTP │ │
│ │ - DTLS 1.2+ 握手加密 │ │
│ │ - SRTP 数据流加密 (AES-GCM 128-256位) │ │
│ │ - 完美前向保密 (PFS) │ │
│ │ - 应用于所有 WebRTC 连接 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 第2层: 连接层安全 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ ICE/STUN/TURN │ │
│ │ - NAT 穿透 │ │
│ │ - 连接验证 │ │
│ │ - 防止未授权连接 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 第1层: 网络层安全 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ HTTPS / WSS │ │
│ │ - 信令服务器连接加密 │ │
│ │ - TLS 1.2+ │ │
│ │ - 防止中间人攻击 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ 密钥管理系统 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 会话密钥 (Session Keys) - 临时性 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ WebRTC 会话密钥 │ │
│ │ - 每次连接自动生成 │ │
│ │ - DTLS 握手协商 │ │
│ │ - 连接断开后销毁 │ │
│ │ - 提供完美前向保密 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 端到端密钥 (E2EE Keys) - 临时性 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 聊天加密密钥 │ │
│ │ - ECDH 密钥交换 │ │
│ │ - Curve25519 椭圆曲线 │ │
│ │ - 存储在内存中 │ │
│ │ - 页面刷新后清除 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 设备标识 (Device ID) - 持久性 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Peer ID │ │
│ │ - 存储在 localStorage │ │
│ │ - 用于设备识别 │ │
│ │ - 不涉及加密操作 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
| 威胁类型 | 防护措施 | 安全级别 |
|---|---|---|
| 网络窃听 | DTLS/SRTP 加密 + E2EE | 高 |
| 中间人攻击 | WebRTC 证书验证 + DTLS | 中-高 |
| 消息篡改 | Poly1305 消息认证码 | 高 |
| 重放攻击 | Nonce 随机数 | 高 |
| 身份伪造 | Peer ID + 公钥验证 | 中 |
| 密钥泄露 | 完美前向保密 (PFS) | 高 |
| 服务器窃听 | P2P 直连 + E2EE | 极高 |
| 本地攻击 | 无持久化敏感数据 | 中 |
安全级别说明:
- 极高: 当前技术条件下几乎不可破解
- 高: 需要极高成本和专业知识才能破解
- 中-高: 有一定防护,但仍有潜在风险
- 中: 基础防护,建议增强
┌────────────────────────────────────────────────────────┐
│ 开发环境架构 │
├────────────────────────────────────────────────────────┤
│ │
│ 开发者机器 (localhost) │
│ ┌────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Web Dev │ │ Desktop Dev │ │ │
│ │ │ :3000 │ │ Electron │ │ │
│ │ └──────┬──────┘ └──────┬──────┘ │ │
│ │ │ │ │ │
│ │ └────────┬───────┘ │ │
│ │ │ │ │
│ │ ┌────────▼────────┐ │ │
│ │ │ 信令服务器 │ │ │
│ │ │ :7000 (WS) │ │ │
│ │ │ :8000 (Peer) │ │ │
│ │ └─────────────────┘ │ │
│ │ │ │
│ └────────────────────────────────────────────────┘ │
│ │
│ 局域网内其他设备 │
│ ┌────────────────────────────────────────────────┐ │
│ │ 手机/平板访问: http://192.168.x.x:3000 │ │
│ └────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────┐
│ 网络拓扑图 │
├────────────────────────────────────────────────────────────────┤
│ │
│ 公网 │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ 信令服务器 │ │ │
│ │ │ (公网IP/域名) │ │ │
│ │ └────────┬────────┘ │ │
│ │ │ │ │
│ │ ┌───────────┼───────────┐ │ │
│ │ │ │ │ │ │
│ └───────────┼───────────┼───────────┼────────────────────┘ │
│ │ │ │ │
│ ┌───────────▼─┐ ┌─────▼──────┐ ┌▼──────────────┐ │
│ │ 家庭网络A │ │ 办公网络B │ │ 移动网络C │ │
│ │ (NAT) │ │ (NAT) │ │ (4G/5G) │ │
│ │ │ │ │ │ │ │
│ │ ┌────────┐ │ │ ┌────────┐ │ │ ┌──────────┐ │ │
│ │ │ 设备1 │ │ │ │ 设备2 │ │ │ │ 手机1 │ │ │
│ │ │ Web │ │ │ │Desktop │ │ │ │ Mobile │ │ │
│ │ └────────┘ │ │ └────────┘ │ │ └──────────┘ │ │
│ │ ┌────────┐ │ │ ┌────────┐ │ │ │ │
│ │ │ 设备3 │ │ │ │ 设备4 │ │ │ │ │
│ │ │ Mobile │ │ │ │ Web │ │ │ │ │
│ │ └────────┘ │ │ └────────┘ │ │ │ │
│ └─────────────┘ └────────────┘ └───────────────┘ │
│ │
│ P2P 连接 (跨网络) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 设备1 (NAT-A) ◄──────WebRTC P2P──────► 设备2 (NAT-B) │ │
│ │ │ │
│ │ • 通过 STUN 发现公网地址 │ │
│ │ • 通过 ICE 建立最优连接路径 │ │
│ │ • 如无法直连,使用 TURN 中继 (可选) │ │
│ │ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────┘
- 分片大小优化 - 64KB 分片,平衡速度和内存
- 流式传输 - 避免一次性加载大文件到内存
- 并行传输 - 支持同时传输多个文件
- 缓冲管理 - 接收端智能缓冲
- 增量更新 - 只同步变化部分
- 本地持久化 - IndexedDB 存储,减少网络同步
- 连接池复用 - WebRTC 连接复用
- 延迟加载 - 按需加载便签内容
- 密钥缓存 - 共享密钥缓存,避免重复计算
- 批量加密 - 批量处理消息
- Web Workers - 异步加密,不阻塞 UI
信令服务器集群:
- 多实例部署
- Redis 共享设备状态
- 负载均衡器分发请求
- WebSocket 粘性会话
插件架构(未来):
interface MeshKitPlugin {
name: string
version: string
initialize(core: MeshKitCore): void
destroy(): void
}可扩展功能:
- 视频通话
- 屏幕共享
- 语音消息
- 云同步(可选)
- 插件市场
MeshKit 采用现代化的技术栈和模块化的架构设计,实现了:
- 高性能 - WebRTC P2P 直连,局域网可达 20-50 MB/s
- 高安全 - 多层加密,端到端加密,军事级保护
- 高可用 - 去中心化设计,服务器仅用于信令
- 易扩展 - 清晰的模块划分,便于添加新功能
- 跨平台 - 统一核心逻辑,支持多平台部署
通过合理的架构设计和技术选型,MeshKit 为用户提供了一个安全、高效、易用的 P2P 协作平台。