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