Skip to content

P2P 消息系统 (p2p)

Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。

核心特性

  • 🌐 P2P 通信: 点对点消息收发,无中心服务器
  • 📱 设备配对: 6 位配对码安全配对设备
  • 📬 消息收件箱: 支持未读过滤和分页查看
  • 🔗 桌面桥接: 通过 HTTP 连接桌面应用信令服务

系统架构

p2p 命令 → p2p.js (Commander) → p2p-manager.js

                 ┌────────────────────┼────────────────────┐
                 ▼                    ▼                    ▼
           Peer 管理             消息收发              设备配对
                 │                    │                    │
                 ▼                    ▼                    ▼
          p2p_peers 表        p2p_messages 表     p2p_paired_devices 表


                                              P2PBridge (HTTP → 桌面 9001)

概述

CLI Phase 5 — P2P 点对点消息和设备配对。

命令概览

bash
chainlesschain p2p status              # P2P 网络状态
chainlesschain p2p peers               # 列出已知 peer
chainlesschain p2p send <peer> "msg"   # 发送消息
chainlesschain p2p inbox               # 查看收件箱
chainlesschain p2p pair <device-name>  # 配对设备
chainlesschain p2p devices             # 列出已配对设备
chainlesschain p2p unpair <device-id>  # 解除配对

功能说明

Peer 管理

  • registerPeer — 注册新 peer(peer_id, 显示名, DID, 公钥, 设备类型)
  • getAllPeers / getOnlinePeers — 查询 peer 列表
  • updatePeerStatus — 更新 peer 在线状态

消息收发

  • sendMessage — 发送文本消息,支持加密标记
  • getInbox — 获取收件箱(支持仅未读过滤、分页)
  • markMessageRead — 标记消息已读
  • getMessageCount — 统计总消息/未读消息数

设备配对

  • pairDevice — 生成 6 位配对码
  • confirmPairing — 验证配对码确认配对
  • getPairedDevices / unpairDevice — 设备管理

桌面桥接 (P2PBridge)

P2PBridge 类通过 HTTP 连接到桌面应用(默认 localhost:9001),支持:

  • checkBridge() — 健康检查(5s 超时)
  • getStatus() — 获取桥接状态

数据库表

表名说明
p2p_peerspeer 注册信息
p2p_messages消息存储
p2p_paired_devices已配对设备

配置参考

bash
# CLI 选项
--unread                 # 仅显示未读消息 (inbox 子命令)
--limit <num>            # 收件箱分页大小
--json                   # JSON 格式输出

# 环境变量
CHAINLESSCHAIN_DB_PATH     # p2p_peers / p2p_messages / p2p_paired_devices 存储
P2P_BRIDGE_HOST            # 桌面桥接主机 (默认 localhost)
P2P_BRIDGE_PORT            # 桌面桥接端口 (默认 9001)
P2P_BRIDGE_TIMEOUT_MS      # 桥接健康检查超时 (默认 5000ms)
P2P_PAIRING_CODE_TTL_SEC   # 配对码有效期(秒)

性能指标

操作目标实际状态
p2p status (桥接健康检查)< 500ms~300ms
p2p peers< 100ms~50ms
p2p send (本地写入)< 150ms~70ms
p2p inbox (分页 50)< 150ms~80ms
p2p pair (生成配对码)< 100ms~40ms
p2p devices< 100ms~50ms

测试覆盖率

✅ p2p-manager.test.js  - 覆盖 CLI 主要路径
  ├── 参数解析
  ├── 正常路径
  ├── 错误处理
  └── JSON 输出

安全考虑

  • 消息支持加密标记,结合 DID 身份验证
  • 配对码为 6 位随机数,有效期有限
  • 私钥和公钥绑定 peer 身份,防伪造

使用示例

场景 1:查看 P2P 网络状态

bash
chainlesschain p2p status
chainlesschain p2p peers

检查 P2P 网络连接状态和桌面桥接是否在线,查看已知 peer 列表。

场景 2:发送加密消息

bash
chainlesschain p2p send peer-abc123 "项目代码已推送,请 review"
chainlesschain p2p inbox

向指定 peer 发送点对点消息,查看收件箱中的未读消息。

场景 3:配对新设备

bash
chainlesschain p2p pair "我的手机"
chainlesschain p2p devices
chainlesschain p2p unpair <device-id>

生成 6 位配对码与手机配对,管理已配对设备列表,解除不再使用的设备。

故障排查

问题解决方案
status 显示离线确认桌面应用已启动且信令端口 9001 可达
send 失败确认目标 peer 已注册且在线
pair 超时确认两端网络连通,重新生成配对码

关键文件

  • packages/cli/src/commands/p2p.js — 命令实现
  • packages/cli/src/lib/p2p-manager.js — P2P 管理库

相关文档

依赖

  • 纯 Node.js crypto(无外部依赖)
  • 桌面桥接通过 HTTP fetch

基于 MIT 许可发布