您的位置:首页 > 理论基础 > 计算机网络

本地数据与后台网络数据同步问题

2016-07-11 18:19 423 查看
今天总结一下这两天的工作内容吧,项目有一个记录模块原来只做了网络存储,所有的增删改查都依赖于网络,同时还有几个H5的展示界面,也是在服务器抓取数据,就这样有些没有wifi的客户便开始吐槽了(就是做个记录自己看,还要用我流量),大概就是这个样子,下面开始进入正题。

我需要做的:本地要建立数据库,然后H5要在我这拿数据(这个后续会说到),要抓取服务器的历史数据,还要考虑到用户两个手机切换使用时的同步问题(这是这次重点)。

本地数据库需要字段(id , net_Id , update_time , state ) // net_id 为服务器id, state为数据现在状态(分为:0,已上传,1新添,2已修改,3已删除)

服务器数据库需要字段(id , updata_time , state)

首先,id问题,我们选择的是本地数据库与服务器数据库维护两套不同的id(本地同时要存在本地id与服务器id,服务器数据库只维护自己id即可),本地的本地id自增(作为本地数据库的主键),未上传时本地数据库的服务器id为空,上传后服务器返回服务器id(服务器的id也为自增)并赋给本条数据。

然后就是同步操作了,第一次同步,此时update_time默认为0(存储在sharedpreference中)客户端需要拉取后台服务器数据库中的所有数据,并自动添加本地id(自增),此时将update_time设置为当前系统时间。之后如果网络状态一直良好,则在每次对本地数据库进行操作之后都对服务器进行操作,其中如果新添数据,则在上传成功之后接收返回来的服务器id赋给当前数据存入本地。如果用户的网络状态一直不好则所有操作都在本地进行。

客户端会在每次打开的时候,或者在运行状态下由无网络切换到有网络的状态时,会触发同步操作,同步操作分为抓取没有网络这段时间的服务器数据(可能为用户用别的手机添加)和上传这个时间段进行操作过的数据。首先根据update_time抓取数据,并判断每个的state,若为3(已删除),则删除本地的此条数据,其他则根据服务器id添加或覆盖本地数据,然后在这个异步请求当中去上传数据(否则update_time不能同步),上传所有update_time大于本地sp存储的time的数据,后台再去判断state进行操作,然后依次返回这几条数据的服务器id供本地存储。此时将本地sp存储的时间戳更新为本地时间。

这样就完成了同步操作(过程可能有些粗糙,欢迎大家指错,或给予建议)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息