> 1. Mars
移动端IM网络层跨平台组件库Mars- https://github.com/Tencent/mars
Android、iOS、OS X 平台的 demo(微信开源Mars的Demo源码)-https://github.com/52im/mars/tree/master/samples
「弱网络环境下的网络连接质量」,「如何保证长链接通畅」,「如何解决移动wap网关影响 」,「如何针对不同平台不同版本的网络API差异性适配」,「如何充分利用网络带宽 」等等只有移动网络下才特有的问题,移动互联网开始的时候,插线的互联网已经很稳定了。
Mars 是一个结合移动 App 所设计的基于 socket 层的解决方案,在网络调优方面有更好的可控性,对于 HTTP 完整协议的支持,已经考虑后续版本会加入。
-- 微信Mars解决了如下问题:
1.提供长连、短连两种网络通道;
2.常规的网络能力,例如 DNS 防劫持、动态 IP 下发、就近接入、容灾恢复等;
3.贴合移动互联网的网络层解决方案;
4.贴合移动终端的平台特性:前后台、活跃态、休眠、省电、省流量等。
-- Mars在容灾设计上,Mars 不仅使用了服务器容灾方案,也设计了客户端的本地容灾。当部分服务器出灾时,目前微信可以做到,15min 内把95%以上的用户转移到可用服务器上。Mars 的网络模块是基于 socket 层的网络解决方案.这个库提供了网络的方方面面,包括日志,socket,长连接,短连接,网络诊断,网络连通性等.
-- Mars它主要包括以下几个部分:
1.XLOG:通用日志模块,充分考虑移动终端的特点,提供高性能、高可用、安全性、容错性的日志功能;
2.SDT:网络诊断模块;
2.STN:信令传输网络模块,负责终端与服务器的小数据信令通道。包含了微信终端在移动网络上的大量优化经验与成果,经历了微信海量用户的考验;
4.COMM:基础库,包括socket、线程、消息队列、协程等基础工具;
Mars STN作为信令传输模块,与目前常用的网络组件如AFNetworking(用于iOS平台)、Retrofit、OkHttp(用于Android平台)相比,STN是跨平台的,基于Socket层的信令网络,主要用于小数据传输。STN中还包含了很多其他方面的实用设计,包括自定义DNS、容灾设计、负载考量、APP的前后台考量、休眠机制考量、省电机制等等。
微信中使用到的网络服务,大体分为两种类型:信令网络、数据网络。其中STN负责信令网络,CDN组件则负责数据网络。但由于CDN涉及到腾讯内部的CDN服务,因此在Mars的开源列表中并没有包含CDN部分。
基础组件最初就定位为:跨平台、跨业务的基础组件。跨平台的基础组件已经包含了网络组件、日志组件在内的多个组件。
> 2. OKHttp
一网打尽OkHttp中的缓存问题- http://www.cnblogs.com/dajiji/p/6324570.html
教你如何使用okhttp缓存- http://blog.csdn.net/u014614038/article/details/51210685
开源项目OkHttpPlus-https://www.jianshu.com/p/281b9af06642
OkHttp封装,支持GET、POST、UI线程回调、JSON格式解析、链式调用、小文件上传下载及进度监听等功能- https://github.com/ZhaoKaiQiang/OkHttpPlus
Volley和oOkHttp结合的Demo请戳煎蛋项目- https://github.com/ZhaoKaiQiang/JianDan_OkHttpWithVolley
Android Https相关完全解析 当OkHttp遇到Https- http://blog.csdn.net/lmj623565791/article/details/48129405
https://github.com/square/okhttp
https://github.com/hongyangAndroid/okhttputils
http://blog.csdn.net/lmj623565791/article/details/47911083
http://blog.csdn.net/lmj623565791/article/details/48129405
OKHttp请求超时无效问题记录- https://www.jianshu.com/p/89033630ab7a
https://github.com/square/okhttp/issues/2756
只需在Okhttp初始化的时候添加如下代码即可:sClient = builder.retryOnConnectionFailure(false).build();
-- 吃透请求流程!深入分析okhttp3源码- https://mp.weixin.qq.com/s/8fdfavCe7XtzeKSHbxMqHA
-- okHttp通信的原理是:
主要是通过dispatcher不断从requestQueue中取出请求(call),根据是否已经缓存调用Cache或Network这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据,分为同步和异步请求,同步请求通过call.execute()直接返回当前的response,而异步请求会把当前的call.enqueue添加到请求队列中,通过回调的方式来获取最后结果.
okHttp整个流程是,通过OkHttpClient将构建的Request转换为Call,然后在RealCall中进行异步或同步任务,最后通过一些的拦截器interceptor发出网络请求和得到返回的response。
-- OkHttp拦截器
拦截器是OkHttp中提供一种强大机制,它可以实现网络监听、请求以及响应重写、请求失败重试等功能。
1、获取HttpCodec对象,对Http1.1或者http/2不同协议的http请求进行处理
2、发送http请求数据,构建Resposne.Builder对象,然后构建Response并返回
拦截器就是基于责任链模式,每个节点有自己的职责,同时可以选择是否把任务传递给下一个环节。OKHttp 内部是使用拦截器来完成请求和响应的,利用的是责任链设计模式。所以可以说,拦截器是 OKHttp 的精髓所在。查看proceed方法,可以看到,它使用循环+递归的方式,借助函数调用栈,将拦截器串联起来。
-- OKHttp兼容http与https
基于OKHttp实现对Https的支持- http://blog.csdn.net/u013347784/article/details/70168043
Okhttp对http2的支持简单分析- http://m.blog.csdn.net/chunqiuwei/article/details/76098827
Retrofit/Okhttp Https兼容到Http降级处理实践(信任所有https)- http://blog.csdn.net/sk719887916/article/details/70216791
使用okHttp支持https- http://www.jianshu.com/p/cd34b8e97e19
Android Https相关完全解析 当OkHttp遇到Https http://blog.csdn.net/lmj623565791/article/details/48129405
使用OkHttp而不再使用HttpURLConnection或者是HttpClient,使用OkHttp之前,需要先下载OkHttp.jar包,大家可以在https://github.com/square/okhttp去下载OkHttp的最新jar包以及源码,同时因为OkHttp内部依赖okio,所以大家还要自行下载okio.jar包,下载地址在这里- https://github.com/square/okio
1.一般的get同步阻塞请求和异步请求
2.一般的post同步阻塞请求和异步请求
3.实现了文件上传功能(包含文件上传进度回调显示)
4.实现了大文件下载功能,只需要指定文件下载路径即可,也包含了下载进度的回调显示
5.实现了请求结果的自动解析,用户也可以根据需求扩展自定义结果解析类
6.对所有请求都支持直接将结果解析转换为JavaBean对象或集合
7.支持对返回结果结构的自定义,例如设置返回结果结构为:{flag:1|0,error:错误信息,result:请求结果},结果解析的时候会按照此结构进行结果解析
OkHttp
addNetworkInterceptor添加的是网络拦截器Network Interfacetor它会在request和response时分别被调用一次;
addInterceptor添加的是应用拦截器Application Interceptor他只会在response被调用一次。
> 3. Volley
Volley- https://github.com/google/volley
Volley主页:https://android.googlesource.com/platform/frameworks/volley
Volley的自定义进阶封装- https://github.com/CrosX1019/VolleyDemo
Android Volley框架使用详解- https://blog.csdn.net/qq_33425116/article/details/52685053
Android:Volley的使用及其工具类的封装- https://github.com/lishide/MyVolley
Volley 的 GitHub 地址:https://github.com/mcxiaoke/android-volley
Volley是Google官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持HttpClient、HttpUrlConnection,甚至支持OkHttp,而且Volley里面也封装了ImageLoader。
Volley的特点有如下:我们的应用进行网络通信的时候会更快、有着高效率的GET、POST及网络图像的异步处理请求机制、能对多个请求进行排序、能对请求的结果进行缓存、能多级别取消请求。Volley适用场景:它适用于网络通信频繁但是数据量不大的场景;然而对于数据量非常大的情况下,它的性能就会非常差。
在Volley内,一般的Http的请求方法有三种,分别是StringRequest,JsonObjectRequest以及JsonArrayRequest,而每个方法都可以分为GET和POST请求方式。从它们的名字可以知道,StringRequest是请求一段字符串,JsonObjectRequest是请求一个JSON对象。JsonArrayRequest是请求一组JSON数组。
> 4. Retrofit
【腾讯Bugly干货】深入浅出 Retrofit- https://blog.csdn.net/Tencent_Bugly/article/details/51580627
Retrofit 2.0 开始内置 OkHttp,前者专注于接口的封装,后者专注于网络请求的高效,二者分工协作
Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。
Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神JakeWharton。
- Retrofit优势:
编程思想:减少解耦,降低耦合,让接口开发灵活,不同api之间互相不干扰,
代码风格:使用注解方式,代码简洁,易懂,易上手
设计思想:采用建造者模式,开发构建简便!
- 使用Retrofit2与OkHttp拦截器- https://www.jianshu.com/p/73216939806a
A safety client by Https for android, (Android网络框架,基于Retrofit和RxJava打造的链式网络库, 支持
okhttp的调用风格,又兼容Retrofit API,并支持rxJava链式操作)-https://github.com/Tamicer/Novate
一个基于 OkHttp 的 RESTful API 请求工具Retrofit2- https://github.com/square/retrofit
Android Retrofit2是一个安全的为Android和Java开发的Http访问框架,它是对OkHttp的进一步封装
Retrofit 是一个 Square 开发的类型安全的 REST 安卓客户端请求库。这个库为网络认证、API 请求以及用 OkHttp
发送网络请求提供了强大的框架 。 Retrofit 把 REST API 返回的数据转化为 Java 对象,就像 ORM 框架那样,把数据库内的存储的数据转化为相应的 Java bean对象。 那么我们知道 Retrofit 是一个类型安全的网络框架,而且它是使用 REST API 的.
> 持久Cookie
Retrofit2.0 ,OkHttp3完美同步持久Cookie实现免登录- https://blog.csdn.net/sk719887916/article/details/51700659
A persistent CookieJar implementation for OkHttp 3 based on SharedPreferences.- https://github.com/franmontiel/PersistentCookieJar
构建 CookieJar 对象,并重写 saveFromResponse 和 loadFromRequest 方法。
mOkHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJar() {
private final HashMap
@Override
public void saveFromResponse(HttpUrl url, List
cookieStore.put(url.host(), cookies);
}
@Override
public List
List
return cookies != null ? cookies : new ArrayList
}
}).build();