Skip to the content.

架构说明

Note Sync Now 由一个 React + Vite 客户端、一个 Express + Socket.IO 服务端,以及一套 GitHub Pages 文档站组成。系统设计遵循“客户端负责加密与恢复,服务端负责中转与持久化”的边界。

总体分层

客户端层

关键路径:

服务端层

关键路径:

核心架构原则

  1. 端到端加密优先:笔记内容在客户端侧加密,服务端只接收密文。
  2. 助记词驱动恢复:客户端通过助记词派生房间与加密相关信息。
  3. 服务端尽量无状态:服务端聚焦同步转发、短期内存态与持久化兜底。
  4. 冲突显式处理:本地编辑与远端更新冲突时,不把所有情况都简化为覆盖写入。
  5. 多层存储退化:优先使用持久化存储,不可用时回退到内存模式。

同步数据流

  1. 用户在客户端编辑内容。
  2. Zustand 更新当前笔记状态。
  3. useSocket 对内容进行加密,并按需要拆分为分块载荷。
  4. 客户端通过 push-update 将密文发送到服务端。
  5. 服务端验证房间成员资格、数据格式、大小与频率限制。
  6. 服务端将最新密文保存在持久化层或内存兜底层。
  7. 服务端通过 sync-update 向房间内其他成员广播更新。
  8. 接收端客户端解密数据,必要时进入冲突检测与人工解决流程。

关键模块关系

客户端同步引擎

useSocket.js 是客户端同步主入口,承担:

服务端事件模型

server/index.js 当前的关键事件包括:

当前实现重点

根据现有设计文档与代码实现,本项目当前重点在于:

推荐阅读顺序

  1. 仓库概览
  2. 当前页面:架构说明
  3. 部署与运行
  4. 安全与同步机制
  5. 贡献指南
  6. 更新日志