美文网首页
Notes 离线实现方案

Notes 离线实现方案

作者: 朱传武 | 来源:发表于2022-10-24 11:31 被阅读0次

    数据从服务器第一次同步

    1.app首次打开并登录之后,需要拉取所有相关数据,包括所有文件信息、所有notebook信息,所有annotations信息(第一次打开同步数据过程较慢长)


    image.png

    2.建立socket连接,app打开并同步完之后,需要和服务器建立长链接,监听相关改变


    image.png

    文件相关变动的同步

    1、文件新增
    当某一个teacher新上传了新文件的时候,服务器需要给有相关权限的user发送通知(通过socket发送),

    image.png

    如图,如果teacher A上传了新文件,而且分享给了teacher B,则这时候,服务器要通过socket把新增文件的详细信息推送给所有的Admin用户以及teacher B(此时建议服务端可以采用类似建立group的机制,就是有相关文件权限的人,backend创建一个socket group,类似群聊),如果此时teacher B 或admin A 不在线,则服务器应将此条消息存入offline_message 表,当用户teacher B 重新连线之后,首先会查询服务器是否有遗漏的消息,此时服务器可通过一个query查询将发送失败的消息返回给teacher B。teacher B拿到消息之后,需要展示“teacher A 新上传了一个新文件,点击查看或点击刷新列表“,更新teacher B 本地ipad数据库(此举确保本地数据库数据和远端数据库数据一致),此时服务端应该删除offline_message 相关的记录。

    2.文件删除
    文件删除流程基本等同于文件新增流程
    3.文件权限变更,
    如果teacher A 删除了对teacherB的相关权限,则服务端也要发送相关的消息给teacher B以及admin 们,类似群聊的时候teacher B被 A剔除。

    annotations相关变动的同步

    1.annotations 新增(类似file新增)-------给有此notebook权限的所有用户发消息。
    2.annotations 删除(类似files删除)-------给有此notebook权限的所有用户发删除消息。
    3.annotations变更,服务器给所有有权限用户发送相关变更内容。

    完全实现离线

    如果以上步骤完全实现,则ipad端本地数据库基本可以保持和远端数据库完全一致,则如果用户离线状态下,完全可以使用ipad本地数据库。
    1.展示
    如果用户当前离线,展示的数据完全来源于本地数据库。所有的文件、notebook、annotations。
    2.离线状态下操作file
    目前木有离线状态下操作file的需求,所以,此条目前可以忽略。
    3.离线状态下操作annotations
    离线状态用户操作annotaitons,app将把所有用户操作存在一个本地数据库表里面,当网络恢复之后,app用户首先查询所有服务器其他用户在这期间的所有变更内容,之后判断自己修改的内容是否和服务端有冲突,如果没有,则直接同步到服务端,如果有冲突,则让用户选择,需要保存的内容。

    综上:数据完全存在本地数据库,app不会消耗大内存,可保持流畅性。以上流程完全可以保证本地数据和远端数据库实时同步,而通过socket方式,使数据同步更实时,而且app不会频繁query服务器所有数据,所以也不会带来任何性能问题,本地数据库能保持实时性,这样实现完全离线的目标,就水到渠成了。

    相关文章

      网友评论

          本文标题:Notes 离线实现方案

          本文链接:https://www.haomeiwen.com/subject/oltgzrtx.html