最近优化了通讯录拉取的实现方式,对它进行整理。
通讯录涉及用户的关系链,用户的具体数据,包括头像,昵称,战绩,在线状态等信息。
之前的实现方式如下:
统一的协议,定义TID字段,由客户端填充具体的TID,来拉取用户的信息,由于数据库不属于我们,客户端又需要排序等信息,所以每次拉取,都必须全量拉取。
结果:
协议失败率高,客户端经常要等比较久的时间,才能拉取完整。消耗客户端的流量,其中有很多不必要的信息,没必要重复拉取。
优化后的方式:
将协议一分为三,包括关系链信息,用户的动态信息(经常变换的信息,如在线状态),用户的静态信息(如昵称,性别等)。
关系链信息,由于我们只有备份数据库,所以无法完整的了解关系链的变化情况(增加,修改,可以通过时间戳了解,但是删除好友,无法事实的知道。),所以,我们统一采用MD5值的方式进行比较。
用户端请求上来,会带上次的MD5值,服务器进行对比,如果MD5值有变化,则把新的关系链信息压缩,传送给客户端。
动态信息,我们获取用户的在线状态,只返回在线的用户数据,因为离线的好友,肯定比在线的好友数量多,所以降低了拉取的数据。
静态信息,客户端隔一段时间定时拉取(目前是一天),除非用户主动来拉取,不然不会有变化。
通过这个优化,协议的成功率,提高了5%,还是蛮有成就感的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。