您的位置:首页 > 其它

问题:客户端从服务器分页获取列表,如何保证流量最少,且客户端和Server数据的一致性?

2014-02-14 10:40 645 查看
遇到一个典型问题:客户端从Server分页拉取一组数据。如图所示:(iOS为例)



用户点击View1的“查看”,进入View2.客户端在View2,触发从Server拉取数据操作。

【问题】:

由于Server的数据很大,比如有1000条数据。客户端为了【减少数据流量】没有必要一次全部拉下来,客户端采用分页拉取(例如:分5页拉取,每次拉取200人)。参考具体的场景:

● 如果是首次进入View2,没有缓存,则拉取第一页(0-199条),获取后并保存到本地,如果用户继续往上滑动列表到达底部,触发拉取第二页(200—399条)的事件。

● 此时,用户没有兴趣继续往下看了,反而滑动列表到顶部,触发重新获取列表的操作。如果没有版本号控制,那么客户端扔需要重新拉取第一页,这是流量的浪费。

● 那么,加入版本号控制!客户端和Server增加一个版本号version。看似解决了问题。

● 似乎加入版本号更复杂啦:

从无缓存说起,第一页上传version=0,Server必然返回第一页的结果,客户端做缓存;

但是,第一页完成后,需要更新客户端的version为最新么?

1. 更新version,那么获取第二页的时候,Server一看version跟自己一样,不给客户端数据了。

2. 不更新version,等到所有数据完成后再更新verson,如果用户拉取第一页后,采取了全量拉取,仍会造成第一页数据流量的浪费。

参考其他App,比如“今日头条”客户端,也是这种模式。是怎么实现的呢?

期待大家帮忙思考!!!

----------------------------------

网友“人中赤兔马中吕布”给了一个解决方案:

版本号的话,可以采取xxx.xxx的形式,最后一个xxx表示页数,前面的版本号可以表示其他的概念

● 更新到第几页客户端版本号就已此页的分页号来标识

● 服务器比较的时候同时比较两个xxx具体的版本号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: