对于移动 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 信息上传。这里除了客户端的改动,也是需要服务器支持。服务器在开始接收时,很多信息都不明确,需要开辟缓存来记录整次上传过程。对于比较差的网络,边录边传的效果会更好,毕竟纯语音的比特率并不高,基本都能做到录完就传完。

网易云信即时通讯推送保障及网络优化详解(三):如何在弱网环境下优化大数据传输相关推荐

  1. 即时通讯推送保障及网络优化详解(一)

    如何实现不影响用户体验的后台保活 对于移动APP来说,IM功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生 ...

  2. IM 推送保障及网络优化详解(三):如何在弱网环境下优化大数据传输?

    对于移动 App 来说,IM 功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消 ...

  3. IM推送保障及网络优化详解(二):如何做长连接加推送组合方案

    对于移动APP来说,IM功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消息推送 ...

  4. IM推送保障及网络优化详解(一):如何实现不影响用户体验的后台保活

    对于移动 APP 来说,IM 功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消 ...

  5. 周江华:网易云信IM推送保障及网络优化实践

    周江华,网易资深Android开发工程师,先后主导参与了易信.网易云信.网易七鱼的客户端开发工作,拥有非常丰富的功能开发以及代码优化经验. 2016年9月23日,MDCC 2016中国移动开发者大会在 ...

  6. 网易云信 IM 推送保障及网络优化实践

    本文根据网易云信Android端高级技术架构师 周江华在 MDCC 2016 移动开发者大会上的演讲整理而成,PPT 下载地址:https://github.com/MDCC2016/Android- ...

  7. iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解...

    什么是消息推送 举一个常见的例子,我们的手机上经常会有弹出一些信息,例如QQ信息.微信信息等等,这就是常见的消息推送. 例如: 消息推送的类型: 在屏幕顶部显示一块横幅(显示具体内容) 在屏幕中间弹出 ...

  8. git推送代码的命令详解

    拉去推送代码的命令形式与操作形式是有一一对应关系的,下面根小编一起来看看~ 将本地代码推送到本地仓库 git add . 这个命令相当于: 提交代码 git commit -m "给你提交的 ...

  9. 微信公众号推送功能代码及详解

    现如今社会,微信可谓是人人都有,殊不知大家有没有注意微信推送这个东西.当我们关注公众号之后,就经常会收到公众号的推送,注册完会员会收到会员确认信息,坐完滴滴之后收到的账单信息以及里程积分到账提醒,这些 ...

最新文章

  1. 2013年下半年系统集成项目管理工程师考试试卷(回忆版)
  2. CYQ.Data 轻量数据访问层(一) 概述
  3. 机器学习 聚类篇——python实现DBSCAN(基于密度的聚类方法)
  4. XML文档处理(树的应用)
  5. centos调整页面大小_这2种方法都能调整PDF文档的纸张大小
  6. Php连接及读取和写入mysql数据库的常用代码
  7. linux批量筛选序列变异位点,使用bedtools获取指定坐标上下游的序列
  8. 牛客网–华为机试在线训练5:进制转换
  9. Ubuntu16.04 安装 VIM 代码自动补全插件 YCM
  10. NRF52832 PWM 占空比调整详解
  11. 人工智能研究中心快递柜——代码分析十三
  12. python 可视化 皮肤_为什么我不建议你轻易入Python的“坑”?
  13. 如何查SCI、EI、SSCI检索?怎么开检索报告?
  14. 摩拜单车的“黑科技”
  15. 嵌入式开发:通过嵌入式虚
  16. HANA+帆软:“帕累托“累计占比图的实现
  17. 第一代计算机外星人,安蒂基西拉机器:疑是外星人留下的最早的计算机(4)
  18. WebMatrix学习研究
  19. SDL: Lex Yacc
  20. SQL 根据一个字段的一部分分组查询

热门文章

  1. CocoaPods 的使用与一些异常情况的处理
  2. 关于cookie 跨页面处理
  3. 神经网络(1)--Non-linear hypotheses,为什么我们要学习神经网络这种算法来处理non-linear hypotheses...
  4. tomcat无法启动(JVM错误)
  5. .Net页面的生命周期(ZZ)
  6. C++大学教程(第九版)2016-07 保罗·戴特尔 (Paul Deitel)、 哈维·戴特尔 (Harvey Deitel)_cafbe(C++中文版)
  7. 在linux中安装软件会出的问题,linux中安装程序出现的问题
  8. Android studio | From Zero To One ——TextView实现跑马灯效果及聊天室、文字直播间
  9. 问题 | CSDN编辑图像怎么使图像居中、偏左、偏右
  10. 对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决