Android网络优化1--Native Socket

为何要优化

很多一般的程序,我们都是使用类似如OkHttp,HttpClient,HttpUrlConnnection等就解决了。

但现有的网络协议大多数都缺少对移动网络的优化,而移动网络高RTT高丢包的特性,
导致经常我们的用户觉得我们的程序很“慢”,使用的流量很大,整个程序很渣渣,用户体验很差!

所以当程序发展到一定程度,我们就希望我们的“网速”快点,用户体验好点,流量少点。
而移动网络的通信多基于TCP协议,所以我们这里主要讨论TCP协议
我们采用Native Socket,就是希望在理解TCP协议各种算法原理的情况下,灵活配置定制合适的策略提高我们的APP在移动网络环境下的体验。

当然如果是小项目,完全没必要做这份优化工作的。
因为有些还是需要服务器配合的,工程量也说大不大,说小不小。

优化方案有

  1. 压缩省流量,这没什么说,就像我们使用压缩文件再传送一样。
    1. 使用Zip压缩;gzip压缩文字数据、图像压缩和视频压缩等
    2. 多条协议合并,并发;对数据实时性要求不高时,采用延迟策略,合并分散数据,一次传输;
    3. 协议字段精简
    4. 预读数据;通过一次连接,在最大能力下,根据给出的时间下载到所有的数据,一般情况下视频会采用预读数据的方式。
  2. 保持长连接,使用长连接,链路复用,大量TCP连接建立和结束过程会浪费较多时间在三次握手和四次挥手,同时也造成电量浪费;

为什么是Native Socket

众所周知,Java层已经提供一个简单易用的Socket,那为什么还要舍近求远,自己重新封装一个Native层的Socket呢?相较于Java层的Socket,Native层的Socket可以选择的配置项更多,并且能够比较准确的获取当前的拥塞状态等信息,我们可以针对不同的网络环境和应用场景配置合理的参数以达到最优的体验。当然这是一个选择的问题,如果觉得Java层的Socket足以满足需要,也不一定非要使用Native Socket不可。

Native Socket可配置的参数

那么Native Socket有哪些配置项呢?由于移动网络高RTT和高丢包的特性,移动网络的通信多基于TCP协议,所以我们这里主要讨论TCP协议。在NDK相关平台的include文件夹下的socket.h和tcp.h中列出可以配置的项(这里以Android4.0为例):

socket.h

#define SO_DEBUG 1
#define SO_REUSEADDR 2
#define SO_TYPE 3
#define SO_ERROR 4
#define SO_DONTROUTE 5
#define SO_BROADCAST 6
#define SO_SNDBUF 7
#define SO_RCVBUF 8
#define SO_SNDBUFFORCE 32
#define SO_RCVBUFFORCE 33
#define SO_KEEPALI
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值