# Noterich P2P同步教程:无需云端的跨设备同步 > **在设备上安全同步笔记——无需云存储。** 在数据隐私日益重要的时代,Noterich提供了一种创新的跨设备同步方案。我们的**P2P(点对点)同步**功能使您可以在不同设备之间无缝共享笔记,而无需依赖任何云服务器。您的数据始终属于您自己。 ## 为何选择P2P同步? 传统的笔记应用将数据存储在集中式服务器上。这会带来潜在的隐私风险、订阅费用以及对第三方基础设施的依赖。Noterich则采取了不同的方式: ```mermaid graph LR A[您的设备] <-->|直接连接| B[您的其他设备] C[云服务器] -.->|不需要| A C -.->|不需要| B style A fill:#4CAF50,color:#fff style B fill:#4CAF50,color:#fff style C fill:#9E9E9E,color:#fff,stroke-dasharray: 5 5 ``` ### 主要优势 - **🔒 隐私优先**:您的笔记不会接触第三方服务器 - **⚡ 快速且直接**:设备直接通信,实现更快的同步 - **💰 无需订阅**:免费提供P2P同步,无需高级套餐 - **🌐 随时随地使用**:通过本地网络或互联网进行同步 - **📱 跨平台**:适用于桌面、笔记本电脑、平板电脑和手机 ## P2P同步的工作原理 Noterich利用**WebRTC技术**结合**PeerJS**来建立设备之间的直接连接。当您发起同步时: ```mermaid sequenceDiagram participant D1 as 设备A(发送方) participant S as 信号服务器 participant D2 as 设备B(接收方) D1->>S: 请求连接ID S-->>D1: 生成房间ID D1->>D2: 分享连接链接(二维码/网址) D2->>S: 使用房间ID连接 S-->>D2: 建立对等连接 D1->>D2: 加密并发送笔记 D2->>D2: 解密并导入笔记 D1,D2: 直接加密传输<br/>数据不存储在服务器上 ``` ### 背后的技术 Noterich的P2P实现利用了: 1. **PeerJS库**:处理浏览器间通信的WebRTC复杂性 2. **AES-GCM加密**:用于笔记数据的军事级加密 3. **PBKDF2密钥生成**:安全的基于密码的加密密钥生成 4. **MessagePack序列化**:高效的二进制数据编码,实现快速传输 5. **IndexedDB存储**:本地优先的数据库,支持离线访问 ## 开始使用P2P同步 ### 前提条件 在开始之前,请确保您已: - ✅ 在两种设备上安装了Noterich - ✅ 两种设备已连接到互联网(或同一局域网) - ✅ 拥有现代浏览器(Chrome、Firefox、Edge、Safari) ### 第一步:从源设备发起共享 1. 在Noterich中打开您想要共享的笔记 2. 点击工具栏中的**共享**按钮 3. 选择**"P2P共享"**选项 4. (可选)设置密码以增加安全性 - 密码至少需8个字符 - 使用AES-256-GCM加密 5. 等待P2P服务器初始化 ```mermaid graph TD A[打开笔记] --> B[点击共享按钮] B --> C[选择P2P共享] C --> D{是否设置密码?} D -->|是| E[输入密码≥8个字符] D -->|否| F[跳过加密] E --> G[初始化P2P服务器] F --> G G --> H[生成共享链接和二维码] ``` ### 第二步:分享连接链接 当P2P服务器启动后,Noterich会生成: - **一个包含连接参数的唯一可共享链接** - **二维码**用于手机快速扫描 链接格式如下: ``` https://noterich.com/#dbshare=<infoHash>&server=<signaling-server> ``` **共享方式**: | 方式 | 最适合情况 | 操作方式 | |--------|----------|--------| | 🔗 复制链接 | 通过电子邮件、消息应用 | 点击“复制链接”按钮 | | 📱 二维码 | 移动设备 | 使用设备摄像头扫描 | | 📧 电子邮件 | 远程协作者 | 将链接粘贴到电子邮件中 | ### 第三步:在目标设备接收 在接收设备上: 1. **打开共享链接** - 直接点击链接,或 - 使用移动设备扫描二维码 2. **查看收到的笔记** - 预览笔记标题和元数据 - 验证发送方信息 3. **输入密码**(如果已加密) - 输入发送方提供的密码 - 数据在设备本地解密 4. **选择目标工作空间** - 选择现有的工作空间,或 - 为导入的笔记创建新工作空间 5. **确认导入** - 笔记被解密并保存到IndexedDB中 - 搜索索引自动重建 ```mermaid graph LR A[打开链接] --> B[连接到发送方] B --> C{是否加密?} C -->|是| D[输入密码] C -->|否| E[查看元数据] D --> E E --> F[预览笔记] F --> G[选择工作空间] G --> H[导入和索引] H --> I[同步完成!] style I fill:#4CAF50,color:#fff ``` ## 高级功能 ### 加密传输 对于敏感笔记,Noterich提供可选的端到端加密: **加密过程:** ```javascript // 密码 → 加密密钥(PBKDF2) password + salt → deriveKey() → AES-256-GCM密钥 // 笔记数据 → 加密缓冲区 noteData + key + iv → encrypt() → encryptedBuffer // 传输包 { encryptedBuffer: ArrayBuffer, salt: Uint8Array, // 用于密钥生成 iv: Uint8Array // 初始化向量 } ``` **安全特性:** - 🔐 密钥生成进行100,000次PBKDF2迭代 - 🔐 每次传输使用随机盐值和IV - 🔐 AES-256-GCM认证加密 - 🔐 密码不会传输——仅本地使用 ### 批量笔记同步 高效传输多个笔记: 1. 从设置中访问**数据库传输** 2. 选择**"P2P同步"**模式 3. 选择要同步的笔记 4. 接收方可以批量预览并选择内容 **性能优化:** - 笔记按512KB大小分块传输 - 非阻塞异步处理防止界面卡顿 - 以字节级精度跟踪进度 - 随时取消而不破坏数据 ### 冲突解决 当两个设备上都存在同步的笔记时: ```mermaid graph TD A[检测冲突] --> B{比较时间戳} B -->|本地更新| C[保留本地版本] B -->|远程更新| D[显示冲突对话框] D --> E[选择版本] E --> F[本地] E --> G[远程] E --> H[手动合并] B -->|两者都删除| I[跳过] style C fill:#2196F3,color:#fff style F fill:#2196F3,color:#fff style G fill:#4CAF50,color:#fff ``` **处理冲突类型:** - `local-newer`:您的版本更新 - `remote-newer`:传入版本更新 - `local-deleted`:您本地删除了该笔记 - `remote-deleted`:笔记在发送方设备被删除 - `remote-restored`:之前删除的笔记被恢复 ## 故障排除 ### 常见问题及解决方案 #### ❌ “PeerJS库未加载” **原因**:网络阻塞或信号服务器阻止 **解决方案:** 1. 检查互联网连接 2. 验证防火墙允许WebRTC连接 3. 尝试其他网络(如移动热点) 4. 确保浏览器支持WebRTC #### ❌ “连接超时” **原因**:NAT/防火墙阻止直接连接 **解决方案:** 1. 两台设备在同一网络上 2. 暂时禁用VPN 3. 检查路由器WebRTC设置 4. 使用二维码进行移动设备连接 #### ❌ “解密失败” **原因**:密码错误或传输损坏 **解决方案:** 1. 验证密码完全一致(区分大小写) 2. 向发送方请求新的共享链接 3. 确保传输过程中连接稳定 4. 尝试较小的批量大小 #### ❌ “同步进行中”错误 **原因**:同时尝试多次同步 **解决方案:** 1. 等待当前同步完成 2. 关闭其他Noterich标签页/窗口 3. 刷新页面并重试 4. 如果问题持续,清除浏览器缓存 ### 连接状态指示 | 状态 | 含义 | 操作 | |--------|---------|--------| | 🔵 正在连接 | 建立对等连接 | 等待5-10秒 | | 🟡 正在比较 | 分析笔记差异 | 正常流程 | | 🟠 等待用户 | 需要密码或确认 | 查看对话框 | | 🟢 正在导入 | 将笔记导入数据库 | 不要关闭标签页 | | ✅ 成功 | 同步完成 | 可以开始使用笔记 | | 🔴 错误 | 连接或传输失败 | 检查故障排除 | ## 安全最佳实践 ### 保护您的数据 虽然P2P同步本身具有安全性,但仍需遵循以下准则: 1. **使用强密码** - 至少8个字符(建议12个以上) - 混合大写字母、小写字母、数字和符号 - 不要重复使用其他服务的密码 2. **验证接收方** - 仅与可信设备共享链接 - 对于物理距离传输,使用二维码 - 避免在公共频道发布链接 3. **监控活跃连接** - 在同步过程中检查连接的对等方 - 成功传输后断开连接 - 如果链接被泄露,撤销共享 4. **定期备份** - 定期导出重要笔记 - 将备份存储在安全的地方 - 定期测试恢复流程 ### 了解加密限制 **哪些内容被加密:** - ✅ 笔记内容(文本、格式、元数据) - ✅ 附件和嵌入媒体 - ✅ 传输过程中的数据库结构 **哪些内容不被加密:** - ⚠️ 连接元数据(时间、数据大小) - ⚠️ IP地址(对信号服务器可见) - ⚠️ 设备标识符(用于连接路由) ## 性能优化建议 ### 优化同步速度 1. **网络条件** - 同一局域网传输速度最快 - 建议使用5GHz WiFi而非2.4GHz - 桌面设备使用有线以太网 2. **批量大小** - 大批量传输时,分成小批次 - 监控进度指示器 - 如果传输停滞,取消并重试 3. **浏览器性能** - 同步过程中保持Noterich标签页活跃 - 关闭不必要的浏览器标签页 - 更新到最新浏览器版本 4. **设备资源** - 确保有足够的存储空间 - 关闭占用大量内存的应用 - 如果同步变慢,重启浏览器 ## 内存管理 Noterich实现了智能批量处理,以防止浏览器崩溃: ```javascript // 使用setTimeout异步批量处理 async function asyncBatchProcessor(items, processor, batchSize = 10) { // 以10毫秒为间隔处理批次 // 每10毫秒传递控制给主线程,以保持界面响应 // 防止大批量导入时主线程阻塞 } ``` **建议:** - 单次传输最多100条笔记 - 大批量同步之间间隔30秒 - 定期清除浏览器缓存 ## 常见问题解答 ### Q:我可以同步超过两个设备吗? **A:** 可以!为每对设备分别启动P2P会话。对于多设备工作流: 1. 同步设备A → 设备B 2. 然后同步设备B → 设备C 3. 或者将设备A作为所有其他设备的中心节点 ### Q:P2P同步可以在离线状态下使用吗? **A:** P2P需要初始互联网连接以建立信号服务器连接。连接建立后: - ✅ 本地网络传输无需互联网 - ✅ 数据可以直接在设备间传输 - ❌ 初始连接需要信号服务器访问 ### Q:如果同步中断怎么办? **A:** Noterich能优雅地处理中断情况: - 部分传输的笔记会被丢弃 - 没有损坏的数据会进入数据库 - 只需重新启动同步过程 - 已同步的笔记不受影响 ### Q:我可以与他人的Noterich实例同步吗? **A:** 当然可以!P2P同步可以在任何Noterich用户之间使用: - 与协作者共享个人笔记 - 不需要账户关联 - 每次传输都是独立且安全的 - 非常适合一次性笔记共享 ### Q:有文件大小限制吗? **A:** 实际限制取决于: - 浏览器内存可用性 - 网络稳定性 - 建议最大为每会话50MB - 更大的传输需要分成多个批次 ### Q:共享链接的有效期是多久? **A:** 共享链接是会话级别的: - 在发送方Noterich标签页打开期间有效 - 发送方关闭标签页/浏览器后失效 - 建议一次性使用以确保安全 - 每次传输会话生成新链接 ## 比较:P2P与云同步 ```mermaid quadrantChart title "同步方式比较" x-axis "较低隐私保护" --> "较高隐私保护" y-axis "较低控制" --> "较高控制" quadrant-1 "Noterich P2P" quadrant-2 "避免使用" quadrant-3 "传统云同步" quadrant-4 "集中式服务" "Noterich P2P": [0.9, 0.9] "传统云同步": [0.3, 0.4] "集中式服务": [0.4, 0.3] ``` | 功能 | Noterich P2P | 云同步 | |---------|--------------|--------| | **数据存储** | 仅限您的设备 | 第三方服务器 | | **隐私级别** | 最高 | 依赖提供商 | | **成本** | 免费 | 通常需要订阅 | | **设置复杂性** | 中等 | 简单 | | **同步速度** | 非常快(直接传输) | 中等(通过服务器) | | **离线访问** | 完全支持 | 有限支持 | | **供应商锁定** | 无 | 高 | | **数据可移植性** | 完全可移植 | 受限 | ## 实际应用场景 ### 📚 个人知识库 在以下设备同步您的个人知识管理系统: - 家用桌面用于深度工作 - 笔记本电脑用于咖啡店会议 - 平板电脑用于阅读和注释 - 手机用于快速记录 ### 👥 团队协作 在团队内部安全共享研究笔记: - 无需IT基础设施 - 端到端加密传输 - 通过传输日志进行审计 - 符合隐私法规 ### 🎓 学术研究 协作处理论文和文献综述: - 共享带注释的PDF和笔记 - 本地维护版本历史 - 在大学或个人设备间工作 - 保护未发表的研究 ### 🏢 企业部署 在注重隐私的企业中部署Noterich: - 数据不会离开公司网络 - 通过配置在防火墙后运行 - 与现有安全政策集成 - 减少对云服务的依赖 ## 技术深度解析(面向开发者) ### 架构概览 ```mermaid graph TB subgraph 发送方["发送设备"] A1[笔记数据] --> A2[使用MessagePack序列化] A2 --> A3{是否加密?} A3 -->|是| A4[AES-256-GCM加密] A3 -->|否| A5[明文二进制] A4 --> A6[分块为512KB] A5 --> A6 A6 --> A7[WebRTC数据通道] end subgraph 接收方["接收设备"] B1[WebRTC数据通道] --> B2[重组分块] B2 --> B3{是否加密?} B3 -->|是| B4[AES-256-GCM解密] B3 -->|否| B5[明文二进制] B4 --> B6[使用MessagePack反序列化] B5 --> B6 B6 --> B7[IndexedDB存储] B7 --> B8[自动重建搜索索引] end A7 -.->|直接P2P| B1 style A4 fill:#FF5722,color:#fff style B4 fill:#FF5722,color:#fff style A7 fill:#4CAF50,color:#fff style B1 fill:#4CAF50,color:#fff ```