技术交流1群:46523908
技术交流2群:46505645
NoHttp 源码及Demo托管在Github欢迎大家Star:https://github.com/Y0LANDA/NoHttp
周六和周日的晚上NoHttp作者在做框架设计直播,大家可以加上面的QQ群来看直播,和作者实时互动。
看官们可以在我主页看其它NoHttp、Volley、OkHttp、xUtil的相关介绍和比较
在正式开始前推荐一篇Volley和NoHttp的比较
这几天 很多人找我要NoHttp架构流程图,几天给大家写出来,有什么不清楚的在地下留言喔,或者在群里直接at我问也可以喔。
不过还是建议大家在周六周日晚上来看我的直播,直播连接在上面的QQ群里有,大家可以加一下,会讲蛮多Android干货和框架设计的。
由UI线程发送请求到队列,队列中是子线程在持续运行,当子线程发现请求进入队列时,马上从队列拿出这个请求,交给解析器(Parser)解析请求,解析器(Parser)拿到请求后要先把请求转换成数据再去解析成泛型,所以解析器(Parser)把请求交给执行器(Executor),执行器(Executor)拿到请求后分析缓存是否过期,若缓存没有过期直接返回数据给解析器;如果缓存过期,执行器(Executor)添加缓存头到请求,调用连接器(Connection)请求服务器,连接器(Connection)在和服务端亲热前会添加之前服务器返回的Cookie(带上暗号),连接器(Connection)和服务端亲热完后会处理Cookie(更新/保存暗号),解析完Cookie后把封装好的数据交给执行器(Executor),由执行器(Executor)处理缓存并发结果发送给解析器(Parser),解析器(Parser)拿到数据后解析成泛型返回给调用解析器(Parser)的子线程,由子线程发送异步结果到UI线程,完成请求。
Thread调用解析器(Parser)解析请求,解析器(Parser)拿到请求后要先把请求转换成数据再去解析成泛型,所以解析器(Parser)把请求交给执行器(Executor),执行器(Executor)拿到请求后分析缓存是否过期,若缓存没有过期直接返回数据给解析器;如果缓存过期,执行器(Executor)添加缓存头到请求,调用连接器(Connection)请求服务器,连接器(Connection)在和服务端亲热前会添加之前服务器返回的Cookie(带上暗号),连接器(Connection)和服务端亲热完后会处理Cookie(更新/保存暗号),解析完Cookie后把封装好的数据交给执行器(Executor),由执行器(Executor)处理缓存并发结果发送给解析器(Parser),解析器(Parser)拿到数据后解析成泛型返回给Thread。
解析器(Parser)原理是,从执行器(Executor)拿到ByteArray和Headers后交给Request的parseResponse方法解析泛型结果。
连接器负责发送数据、传文件,是NoHttp中最重要的一个模块,后边会专门开一篇博客来讲。
当请求进入执行器时,执行器首先读取这个请求的缓存,第一步接着请求是否要求仅仅读取缓存,如果是,当缓存不为null那么返回succeed,如果缓存为null,返回failed,原因是CacheNotFoundError。第二步当不是仅仅读取缓存时,第二步第一种情况缓存不为null时,如果缓存没有过期,直接返回缓存数据,缓存为null时带上缓存去服务器验证缓存是否过期,此时服务器返回304表示刚才验证的缓存没有过期,直接返回刚才的缓存数据,如果返回200表示缓存过期,返回新的数据;第二步第二种情况,当缓存为null时,直接请求服务器,接受到响应后处理缓存,并返回响应数据。
由UI线程发送请求到队列,队列中是子线程在持续运行,当子线程发现请求进入队列时,马上从队列拿出这个请求,调用下载器(Donwloader)请求服务器,下载器(Donwloader)在和服务端亲热前会添加之前服务器返回的Cookie(带上暗号),下载器(Donwloader)和服务端亲热完后会处理Cookie(更新/保存暗号),解析完Cookie开始下载文件,在下载的过程中调用监听器(Listener)回调状态,监听器(Listener)监听器监听到下载状态发生变化时调用信使(Poster),由信使(Poster)发送异步结果到UI线程,直到请求完成。
Thread调用下载器(Donwloader)请求服务器,下载器(Donwloader)在和服务端亲热前会添加之前服务器返回的Cookie(带上暗号),下载器(Donwloader)和服务端亲热完后会处理Cookie(更新/保存暗号),解析完Cookie开始下载文件,在下载的过程中调用监听器(Listener)回调状态,Thread直接拿到下载状态。
NoHttp 源码及Demo托管在Github欢迎大家Star:https://github.com/Y0LANDA/NoHttp