1.网络分层:网络分层从上到下分别是应用层、传输层、网络层、数据链路层和物理层。
①.物理层:该层负责比特流在节点间的传输,即物理传输,通俗的说就是把计算机连接起来的物理手段
②.数据链路层:该层控制网络层和物理层之间的通信,其主要功能是如何在不可靠的物理线路上进行可靠地传递。
③.网络层:该层决定如何将数据从发送方路由到接收方。
④.传输层:该层为两台主机上的应用程序提供端到端的通信。
⑤.应用层:应用程序收到传输的数据后,接下来就要进行解读。
2.tcp的三次握手和四次挥手
如果有大量的连接,每次在连接关闭都要经历三次握手和四次挥手,这显然造成性能低下。因此http有一个叫做keeplive_connection的机制,它可以在数据传输后仍保持连接。
3.HTTP协议原理
①.特点:
支持c/s(客户/服务器)模式;
简单快速:客户端请求服务器只需要传送请求方法和路径;
灵活:HTTP允许传输任意类型,正在传输的类型由Content_Type标记;
无连接:每次连接只处理一个请求;
无状态:HTTP协议是无状态协议,无状态是指对事务处理没有记忆功能。
②.HTTP请求报文:由请求行、请求报头、空行、请求数据组成
请求行:请求方法、URL字段和HTTP协议版本组成。
请求报头:通知服务端关于客户端的请求信息。
请求数据:POST方法中使用,用于填写表单参数。
③.HTTP响应报文:状态行、响应报头、空行、响应正文
状态行:HTTP协议版本信息,状态码,状态码的文本描述
响应报头:用于服务端传递自身的响应
响应正文:服务器返回的资源信息
4.HttpClient和HTTPURLConnection
HTTPURLConnection在的压缩和缓存机制可以有效的减少网络访问流量,在提升速度和省电方面也起到较大作用。另外HttpClient在android 6.0中被移除,HttpUrlConnction是唯一选择。
5.解析Volley
①.设计目标是社和进行数据量不大但是通信频繁的网络操作。
②.基本用法:
Volley请求网络都是基于请求队列的
StringRequest用法:返回数据类型是String
JsonRequst用法:返回数据是JSON格式的数据
ImageRequst(过时)
③.源码解析Volley
(1).从RequestQueue入手
1.1 RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());方法解析如下:
newRequestQueue在android版本大于等于2.3时,调用基于HttpUrlConnection的HurlStack,否则调用基于HttpClient的HttpClientStack
调用request.start方法
start方法中有一个缓存调度线程CacheDispatcher和四个网络调度线程NetworkDispatcher
1.2 mQueue.add(request)方法解析
如果不能缓存,加入到网络请求队列。如果能缓存,判断当前是否有相同的请求且还没有返回结果,如果有,加入到等待队列,如果没有,加入到缓存队列。
(2)CacheDispatcher缓存调度线程
从缓存队列中取出请求,判断是否取消,如果没有取消则判断请求是否有缓存的响应,
如果有缓存响应并且没有过期,则对缓存响应进行解析并回调给主线程,
反之则将请求加入网络调度队列。
(3)NetworkDispatcher网络调度线程
得到响应,将响应加入到缓存中,最后回调到主线程
如下图Volley请求流程
6.解析OkHttp
android 4.4版本,系统内置OkHttp。
①.OkHttp基本用法
(1).异步GET请求:调用的是enqueue方法,注意回调并非UI线程(想同步也可以调用excute方法)
(2).异步post请求:请求体okHttp2.x版本的FormEncodingBuilder改成FormBody,其他与get请求类似。
(3).异步上传文件:定义类型,其他类似
(4).异步下载文件
(5).异步上传Multipart文件
(6).设置超时和缓存:支持连接,写入,读取的超时时间
(7).取消请求:call.cancel可以立即取消一个请求
②.源码解析OkHttp
特点:拦截器,缓存策略,失败重连策略,复用连接池技术
7.解析Retrofit
底层基于OkHttp,使用注解方式提供功能
①.基本用法
注解分类:请求方法注解,标记类注解,参数类注解。
②.源码解析
baseUrl是必须的
create方法中用到了反射生成动态代理类
executorCallbackCall方法回调到主线程