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已配对设备

安全考虑

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

故障排查

问题解决方案
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 许可发布