Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Design] 设计数据同步的服务端与客户端的通讯协议 #113

Open
dmzz-yyhyy opened this issue Sep 21, 2024 · 1 comment
Open
Assignees
Labels
design Ui design work

Comments

@dmzz-yyhyy
Copy link
Owner

设计一种用于同步用户本地数据和服务端时使用的通用协议

@dmzz-yyhyy dmzz-yyhyy added the design Ui design work label Sep 21, 2024
@dmzz-yyhyy dmzz-yyhyy self-assigned this Sep 21, 2024
@dmzz-yyhyy
Copy link
Owner Author

dmzz-yyhyy commented Oct 1, 2024

概述

对于用户数据的服务端使用增量存储,在存储时给于每个增量一个唯一数字id,此id为增量的,客户端可以根据本地的id和远程的id之间的差直接知晓需要同步的增量的数量

数据格式

同步时仅同步当前数据源下的数据

{
  "data_id": -1,
  "data": [
    {
      "data_id": -1,
      "web_data_source_id": -1,
      "book_user_data": [
        {
          "id": -1,
          "last_read_time": "uuuu-MM-ddTHH:mm:ss",
          "total_read_time": "",
          "reading_progress": 0.0,
          "last_read_chapter_id": -1,
          "last_read_chapter_title": "",
          "last_read_chapter_progress": 0.0,
          "read_completed_chapter_ids": []
        }
      ],
      "book_shelf": [
        {
          "id": -1,
          "name": "",
          "sort_type": "",
          "auto_cache": false,
          "system_update_reminder": false,
          "all_book_ids": [],
          "pinned_book_ids": [],
          "updatedBookIds": []
        }
      ],
      "book_shelf_book_metadata": [
        {
          "id": -1,
          "last_update": "uuuu-MM-ddTHH:mm:ss",
          "book_shelf_ids": []
        }
      ],
      "user_data": [
        {
          "path": "",
          "group": "",
          "type": "",
          "value": ""
        }
      ]
    }
  ]
}

通讯

同步时客户端向服务器提供一个唯一id,使用此id可以获取,修改数据,之后执行以下步骤

通讯使用post请求方式

  • 向服务器请求当前最新的用户数据的代号
  • 客户端对比当前代号,如果代号小于服务端返回的代号,则向服务端请求目前最新的用户数据,否则跳过此步骤
  • 服务器返回最新的用户数据,并生成上传代号返回
  • 客户端将请求的类容合并至本地(合并时默认本地数据有更高优先度,但可以让用户自行设置)
  • 尝试向服务器更新当前的用户数据并上传获取代号
  • 服务器检查此上传代号与用户数据代号,如此上传代号为最新生成的上传代号并且用户数据代号大于当前存储的数据代号,则将上传的用户数据替换为最新数据,否则返回合并失败
  • 客户端检查合并是否成功,如果失败则重新执行以上步骤直到成功

请求当前最新用户数据

负载

名称 类型 描述
id string 用户数据的唯一id

响应

名称 类型 描述
data json 用户数据
key int 上传代号

请求更新当前用户数据

负载

名称 类型 描述
id string 用户数据的唯一id
data json 用户数据
key int 上传代号

响应

名称 类型 描述
success boolean 服务器上目前存储的用户数据

@yukonisen yukonisen changed the title [Desgin] 设计数据同步的服务端与客户端的通讯协议 [Design] 设计数据同步的服务端与客户端的通讯协议 Oct 5, 2024
@dmzz-yyhyy dmzz-yyhyy reopened this Nov 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
design Ui design work
Projects
Status: Done
Development

No branches or pull requests

2 participants