美文网首页
网络框架的选择

网络框架的选择

作者: 小水neo | 来源:发表于2020-11-12 23:28 被阅读0次

    网络请求的原理

    网络请求在本质上可以理解为客户端发起请求(Request),然后服务器返回数据(Response)的过程。



    也就是用户通过Socket发送数据给服务器,服务器通过对 Socket进行读写,然后对其进行解析,根据解析内容作出响应,然后客户端从自己的 socket缓冲区中读取信息。而我们所使用的 Httpclient, HttpurlconnectIon则是对其一个封装,将其中的流读写的细节进行了一个隐藏,再进一层Volley、Okhttp则是在其基础上结合线程池进行了一个更高效的封装,Retrofit则是在okhttp的基础之上,利用多种设计模式进行解耦的更简单易用,面向Restful的框架。但他们之间的层级关系并不是特别清晰,这要导致学习的时候有些混乱。

    相比于HttpClient,HttpUrlConnection其API简单,体积小,而且其压缩和缓存机制可以有效的减少网络访问的流量,在提升速度和省电方面都很有优势,所以在Android 6.0中已经抛弃了HttpClient,因此现如今阶段,网络请求的一般是使用HttpURLConnection的

    HttpURLConnection

    Sun公司提供的库,基于HTTP协议的,其底层通过socket通信实现。主要实现了一下的功能
    1.http状态码的定义,默认head定义,和ssl工厂,hostName审核器的判断定义

    1. 实现了GET或者POST方法
    2. 实现了链接超时的处理
    3. 实现了响应缓存 cache
    4. 实现了压缩技术 zip

    Volley

    是由Google公司推出的小巧轻便的异步请求库使网络通信更快、更简单、更健壮。适用于数据不大但通信频繁

    优点:

    1. 适合数据量少的频繁网络数据交互情况
    2. 具有很好的封装,扩展性很强,支持 HttpClient、HttpUrlConnection,甚至支持 OkHttp
    3. 包的体积大约120k,物理质量小
    4. 可直接在主线程调用服务端并处理返回结果。

    缺点

    1.Volley不适合繁重的下载或者流的操作,因为Volley会把解析到的响应数据保持在内存中(ByteArrayPool形式)如果下载大量的数据,这个存储空间就会溢出。

    1. 不支持同步加载
    2. 只支持http请求。不支持https

    Retrofit

    Retrofit是Square公司(https://github.com/square?page=2)设计的默认基于okhttp封装,面向restful的网络请求框架,

    优点

    1. 框架使用了很多设计模式,超级解耦、rest风格,更安全和高效
    2. 支持同步、异步
    3. 使用非常方便灵活。
    4. 可以配置不同的反序列化工具来解析数据,如json、xml等

    缺点

    1. 执行的机制太严格
    2. 只能支持简单自定义参数类型

    Okhttp

    Okhttp概览

    优点

    1. 支持http请求,https请求、支持同步异步。
    2. 使用的是HttpURLConnectioQn,不要担心android版本的变换()
    3. 使用GZIP压缩下载内容,且压缩操作对用户是透明的
    4. 基于NIO和Okio,性能高

    缺点

    1. callback回来是在线程里面, 不能刷新UI,需要我们手动处理。
    2. 封装比较麻烦。
      相比于Volley,okhttp性能更高,因为 OkHttp 基于 NIO(非阻塞式io) 和 Okio(square公司开发的高效io库) ,所以性能上要比 Volley更快。

    如果没有okhttp,会出现什么问题

    1. 如果开启了http缓存,在网络请求发出后,出现了io故障,导致没能接受到,隐私信息则可能泄露
      详细见下篇博文

    框架的选择

    1. Volley不支持同步加载,然而项目需要使用,不支持https,而项目需要使用
    2. Retrofit面向restful,然而本项目使用的GraphQL因此选择okhttp作为网络请求框架

    相关文章

      网友评论

          本文标题:网络框架的选择

          本文链接:https://www.haomeiwen.com/subject/farmbktx.html