Android妙用SPDY协议提高移动端网络请求性能

    本文旨在提出一种提高移动端网络性能的可行方案。我们知道目前移动端使用的网络请求协议基本上都是http。用的最多的是http/1.1,http/2.0正在逐渐壮大,实际上http/2.0是基于google提出的SPDY协议改进而来。废话不多说,马上进入正题。

     关于SPDY协议的详细介绍,请参看 OkHttp完全解析(七)SPDY协议详细介绍 。
    关于OkHttp的使用及源码分析网上相关的资料很多,推荐OkHttp完全解析(八)源码解析一 系列文章。写的很不错。
     从速度上来讲,Http/1.1用明文传输,无需加密验证,速度快;SPDY加入了SSL加密握手,但是SPDY协议允许一个TCP连接复用,可以一个域名只提供一个TCP连接即可完成通信,虽然由于TCP连接复用,但是SSL加密握手协商过程又耗费了一定的时间;Http/2.0是Http的加密版本,也是SPDY的升级版本,如果追求高安全性,可以选用Http/2.0,速度上Http/2.0比Http/1.1稍慢。实验证明单纯的将Http/1.1升级到SPDY,速度提升并不明显,原因在于SSL加密层的添加,一定程度上拖慢了SPDY协议的效率。本文在基于OkHttp开源库的基础上,使用SPDY协议,但是强制忽略了SSL握手验证过程,强制使用SPDY/3.1协议,这样就将SPDY的速度优势发挥出来了。Okhttp的源码量比较大,逻辑比较复杂,我费了不少时间,看懂了大致的思路。请在阅读本文之前阅读前面的OkHttp源码系列文章。
     针对某个公司的产品,服务器端可以针对域名进行配置SPDY协议的使用。针对自家产品完全可以免去SSL协商过程,直接默认使用SPDY协议。关于服务器怎么配置,在此不过多赘述,自行查阅相关文章。
客户端具体实现过程:
下载okHttp源码并进行修改,只需修改一处即可完成。直接上代码:
Connection.java中的connect()函数:

  //当新建连接或者可用连接无效的时候进入此函数
  void connect(int connectTimeout, int readTimeout, int writeTimeout,Request request, List<ConnectionSpec> connectionSpecs,boolean connectionRetryEnabled) throws RouteException {
    if (connected)
      throw new IllegalStateException("already connected");
    SocketConnector socketConnector = new SocketConnector(this, pool);
    SocketConnector.ConnectedSocket connectedSocket;
    if (route.address.getSslSocketFactory() != null) {
      // https:// communication
      connectedSocket = socketConnector.connectTls(connectTimeout, readTimeout, writeTimeou
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值