如何在弱网环境下优化大数据传输缓存
对于移动APP来讲,IM功能正变得愈来愈重要,它可以建立起人与人之间的链接。社交类产品中,用户与用户之间的沟通能够产生出更好的用户粘性。服务器
在复杂的 Android 生态环境下,多种因素都会形成消息推送不能及时达到客户端。另外,不稳定的移动网络也给数据传输的速率和可靠性增长了障碍。网络
本文详解了网易云信IM SDK在应对弱网环境、移动端硬件限制以及Android复杂的生态现状时的探索与心得.如何实现不影响用户体验的后台保活,改善的长链接加推送组合方案,以及在弱网环境大数据传输的优化实践。ide
相关阅读推荐:
网易云信即时通信推送保障及网络优化详解(一)如何作长链接加推送组合方案测试
网易云信即时通信推送保障及网络优化详解(二)如何实现不影响用户体验的后台保活大数据
在即时通信研发当中,音视频通话对实时性要求很高,但能够容忍必定的丢包,因此选择UDP私有协议来作为底层的传输协议。若是只是普通的IM消息,对网络状况其实不是太敏感,最多也就是慢一点,菊花转的久一点。但对于这种视频电话,若是网络差了,发生了常常性卡顿,或者是延迟很高,图像出现花屏,音视频不一样步了,这个功能其实也就至关于废弃了。并且,音视频数据量自己也比较大,在弱网环境下发生问题的几率就更大了。优化
为了提升弱网下的实时音视频的通话效果,须要使用相关方案来作QoS保障:主要包括了基于udp协议的拥塞控制、前向纠错FEC技术及相关的重传技术。同时网络层须要可以实时的探测到网络状态,做为底层调整QoS策略的依据,同时须要回调上层,来动态调整音视频的码率,作到音视频码率自适应。经过上面的QoS保障,实际测试在60%的随机丢包弱网环境下,音视频通话还可以正常进行。spa
下面再来看看对于HTTP的优化。图片语音是IM的必需元素,并且自己数据比较大。在弱网环境下,快速的上传下载,更少的等待时间能够带来更好的用户体验。视频
断点续传能够减小因网络缘由致使的重复传输,减小传输时间,节省流量。blog
图片预加载技术能够根据不用网络状况,在收到消息后,就加载不一样素质的预览图片,甚至直接将原图预加载,作到用户点开即看。
图片和语音文件并无经过长链接收发,而是经过HTTP去作上传下载。传统上经过HTTP上传时,文件会分为一片一片,传完一片,收到回包,才会穿下一个分片,一直到最终传输完成。能够看到,服务器返回ack这段时间,上传通道实际上是空闲的,若是把这段时间利用起来,能够节约很多上传时间。Pipeline就是为此而来。经过重叠利用http请求的响应等待时间,加快传输速度。使用pipeline,须要修改HttpClient,同时还须要服务器提供支持。视网络具体状况,使用pipeline后,一次上传能够减小20%至30%的时间。
常规发送语音消息须要这几步,先录音,而后计算hash值,而后上传,上传完毕后,服务器计算一下校验和,经过后语音消息发送成功。在前面录制语音时,网络其实也是空闲的。把这段时间利用起来,则能够减小后面上传步骤的时间。优化后,流程就变成这样。在录制的过程当中,每录完一段,就做为一个分片直接上传。直到最后录完,计算好hash,再把最后一个分片带上hash信息上传。这里除了客户端的改动,也是须要服务器支持。服务器在开始接收时,不少信息都不明确,须要开辟缓存来记录整次上传过程。对于比较差的网络,边录边传的效果会更好,毕竟纯语音的比特率并不高,基本都能作到录完就传完。