这一篇做一下网络请求的回顾总结。
1、TCP HTTP UDP三者的关系:
(1)TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
(2)在网络层有:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
(3)在传输层中有:TCP协议与UDP协议。
(4)在应用层有:FTP、HTTP、TELNET、SMTP、DNS等协议。
(5)因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
1.TCP
TCP是面向连接的、传输可靠(保证数据正确性且保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
TCP三次握手:建立一个TCP连接时,需要客户端和服务器总共发送3个包。
TCP四次挥手:TCP的连接的拆除需要发送四个包
优缺点: 连接 可靠,稳定,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。缺点是 慢,效率低,占用系统资源高,
2.UDP
面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。如果网络质量不好,就会很容易丢包
3.HTTP
HTTP协议即超文本传送协议(HypertextTransfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。基于应用级的接口使用方便。容错性强
4.Socket
双向的通信连接实现数据的交换,这个连接的一端称为一个socket,提供了网络通信的能力。
Socket 优点:
(1) 传输数据为字节级,传输数据可自定义,数据量小
(2)传输数据时间短,性能高
(3)适合于客户端和服务器端之间信息实时交互
(4)可以加密,数据安全性强
Socket缺点:
(1)需对传输的数据进行解析,转化成应用级的数据
(2)相对于Http协议传输,增加了开发量
Retrofit与okhttp:
Retrofit与okhttp共同出自于Square公司,该公司还贡献了Picasso,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神JakeWharton
关于okhttp的解析转我前面的文章okhttp原理解析
Retrofit在处理HTTP请求的时候,因为不同场景或者边界情况等比较难处理。你需要考虑网络状态,需要在请求失败后重试,需要处理HTTPS等问题。Retrofit强大且配置灵活,第三和OkHttp无缝衔接,第四Jack Wharton主导
优点:
可以配置不同HTTP client来实现网络请求,如okhttp、httpclient等
请求的方法参数注解都可以定制
支持同步、异步和RxJava
超级解耦
可以配置不同的反序列化工具来解析数据,如json、xml等
使用非常方便灵活
框架使用了很多设计模式(感兴趣的可以看看源码学习学习)
缺点:
不能接触序列化实体和响应数据
执行的机制太严格
使用转换器比较低效
只能支持简单自定义参数类型
当工程有多个业务存在,你有一些业务可能访问的地址头会有多个,即baseUrl的切换问题:
在Base做一个公用的,特别业务自身一个Retrofit实例然后创建ApiService,这样就能够间隔不同的业务,其Base底层提供一个复用OkHttpClient,缺点是Retrofit实例变多,或者用@Header的注解来标注使用哪个访问基类地址
相关推荐:
Android的开发之&论网络加载框架(Android-async-http,afinal,xUtils,Volley,okhttp,Retrofit)的特点和优缺点