CN110213336A - 一种网络异步请求下载框架实现系统及方法、计算机程序 - Google Patents
一种网络异步请求下载框架实现系统及方法、计算机程序 Download PDFInfo
- Publication number
- CN110213336A CN110213336A CN201910374412.4A CN201910374412A CN110213336A CN 110213336 A CN110213336 A CN 110213336A CN 201910374412 A CN201910374412 A CN 201910374412A CN 110213336 A CN110213336 A CN 110213336A
- Authority
- CN
- China
- Prior art keywords
- request
- network
- queue
- response
- caching
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明属于计算机软件及应用技术领域,公开了一种网络异步请求下载框架实现系统及方法;包括:请求队列创建模块、请求添加模块、缓存管理模块、网络处理模块、数据分发模块;将请求加入到mCacheQueue中给CacheDispatcher处理可去掉无用的重复的网络请求;Volley构逢的相对完整的符合Http语义的缓存机制可根据Cache‑Control和Expires首部计算缓存的过期时间,如果两个首部都存在情况下,以Cache‑Control为准;利用If‑None‑‑Match和If‑Modified‑Since对过期缓存;或者不新鲜缓存,进行请求再验证,并处理304响应,更新缓存;默认的缓存实现,将缓存以文件的形式存储在Disk,程序退出后不会丢失。
Description
技术领域
本发明属于计算机软件及应用技术领域,尤其涉及一种网络异步请求下载框架实现系统及方法、计算机程序。
背景技术
目前,业内常用的现有技术是这样的:通常一个异步HTTP GET请求是这样的:发出get方法的调用后,相关任务会在后台线程中自动执行,而在主线程中继续处理其他工作,成功获取GET请求的响应时,就会回调onSuccess方法。最直接的写法通常如下所示:
1.声明一个处理器。
2.新建一个线程,并实现其核心run()方法。
3.在核心run()方法中执行调用请求。
4.主处理器处理其他任务。
5.接收到run()方法执行反馈结果时,主处理器暂停其他任务,对线程结果做出响应。
综上所述,现有技术存在的问题是:每次请求时都会创建一个线程,当请求比较频繁的情况下会创建大量线程,创建、销毁线程以及线程调度的开销很大销大会造成网络压力大,传输速度慢;内存占用大,系统运行速度慢;CPU利用率高,计算性能下降等后果;而且Thread对象是一个匿名内部类对象,隐式持有外围类引用,引起Memory Leak,引起内存泄露,造成系统运行缓慢直至崩溃。
解决上述技术问题的难度:
使用线程池复用线程,以避免不必要的创建及销毁线程的开销。将请求加入到mCacheQueue中给CacheDispatcher处理可去掉无用的重复的网络请求;Volley构逢的相对完整的符合Http语义的缓存机制可根据Cache-Control和Expires首部计算缓存的过期时间,如果两个首部都存在情况下,以Cache-Control为准;利用If-None--Match和If-Modified-Since对过期缓存;或者不新鲜缓存,进行请求再验证,并处理304响应,更新缓存;默认的缓存实现,将缓存以文件的形式存储在Disk,程序退出后不会丢失。
解决上述技术问题的意义:
通常,异步传输是以字符为传输单位,每个字符都要附加1位起始位和1位停止位,以标记一个字符的开始和结束,并以此实现数据传输同步。所谓异步传输是指字符与字符(一个字符结束到下一个字符开始)之间的时间间隔是可变的,并不需要严格地限制它们的时间关系。起始位对应于二进制值0,以低电平表示,占用1位宽度。停止位对应于二进制值1,以高电平表示,占用1~2位宽度。一个字符占用5~8位,具体取决于数据所采用的字符集。例如,电报码字符为5位、ASCII码字符为7位、汉字码则为8位。此外,还要附加1位奇偶校验位,可以选择奇校验或偶校验方式对该字符实施简单的差错控制。发送端与接收端除了采用相同的数据格式(字符的位数、停止位的位数、有无校验位及校验方式等)外,还应当采用相同的传输速率。典型的速率有:9 600b/s、19.2kb/s、56kb/s等。
异步传输又称为起止式异步通信方式,其优点是简单、可靠,适用于面向字符的、低速的异步通信场合。例如,计算机与Modem之间的通信就是采用这种方式。它的缺点是通信开销大,每传输一个字符都要额外附加2~3位,通信效率比较低。例如,在使用Modem上网时,普遍感觉速度很慢,除了传输速率低之外,与通信开销大、通信效率低也密切相关。
发明内容
针对现有技术存在的问题,本发明提供了一种网络异步请求下载框架实现系统及方法、计算机程序。
本发明是这样实现的,一种网络异步请求下载框架实现方法,所述网络异步请求下载框架实现方法包括:
步骤一,创建RequestQueue,运行队列,并启动缓存调度器;
步骤二,向RequestQueue中添加一个Request,缓存调度器为第一层缓冲,判断添加的Request是否具有缓冲功能,若不具有则将请求直接进入队列;若需要,将请求加入到mCacheQueue中给CacheDispatcher处理;
步骤三,利用阻塞线程实现缓存管理;
步骤四,处理各种网络请求,放入队列;
步骤五,分发数据并处理网络请求的Response:分发者是对网络请求处理的最后一层,如果响应成功,则触发deliverResponse方法,如果不成功,则触发deliverError方法,处理结束,Request的生命周期即结束。
进一步,步骤一中的RequestQueue创建方法具体包括以下步骤:
(1)先申请一个存放缓存文件的地址;
(2)根据API生成HttpStack:API>9生成HurlStack,API=9,则HttpClientStack,其中HttpClientStack使用的是HttpClient,HurlStack使用的是HttpURLConnection;
(3)生成一个Network;
(4)生成一个RequestQueue,RequestQueue queue=new RequestQueue(newDiskBasedCache(cacheDir),network)。
进一步,步骤一中的队列运行具体以下步骤包括:
(1)stop()确保队列没有运行;
(2)开启CacheDispatcher,作为缓存队列处理器;
(3)开启符合线程池数量的NetworkDispatcher作为网络处理的线程,其数量为RequestQueue构造时传入的参数,默认为4个。
进一步,步骤二中的RequestQueue具体包括:
(1)mWaitingRequests等待队列,类型是Map<String,Queue<Request<?>>>,当之前己经存在了和本次请求相同的URL会把相同的请求放到Queue<Request<?>>队列中,以URL作为关叇饲;
(2)mCurrentRequests夺放所有的请求,包括已经运行的和正在等待的Request;
(3)优先级阻塞队列,mCacheQueue表示的是缓存请求的队列,这个队列会传入到CacheDispatcher做判断;
(4)优先级阻塞队列,mNetWorkQueue表示的是请求网络连接的队列,主要传入到NetworkDispatcher线程中,里面的请求都会向服务器请求数据,(即这里才是唯一的跟服务器打交道的队列);
(5)NetworkDispatcher,和CacheDispatcher,阻塞式线程,不断循环处理Request;
(6)ResponseDelivery m Delivery,请求结果分发器,会把响应的结果返回到主线程的回调函数中。
进一步,步骤二中的CacheDispatcher处理mCacheQueue具体包括:
首先判断mWaitingRequests是否已经存在相同的URL请求;若存在则把当前请求放在等待队列中;若不存在,则mWaitingRequests中添加以URL做关键词的一组数据:mWaitingRequests.put(cacheKey,null);再把请求放入mWaitingRequests队列中。
进一步,步骤三中的利用阻塞线程实现缓存管理具体包括:
(1)初始化缓存区;
(2)从阻塞队列mCacheQueue中取出一个Request;
(3)判断Request是否取消;若取消,则请求结束,返回步骤(2);若不取消,则从缓存mCache获取响应结果;
(4)判断缓存是否存在,若不存在,则将请求加入到mNetWorkQueue中,返回步骤(2);若存在,则判断缓存是否过期,若过期,则将请求加入到mNetWorkQueue中,返回步骤(2);若未过期,则将缓存结果解析为Response;
(5)判断缓存结果是否需要更新,若需要更新,则传输响应结果,并将Request加入到mNetWorkQueue到服务器验证是否更新,返回步骤(2);若不需要更新,则直接传输响应结果,返回步骤(2)。
进一步,步骤四中的网络请求处理具体包括:
(1)缓存开始,若中途抛出错误,由mDelivery把错误信息传回到Request中VolleyError监听器中;
(2)从mNetWorkQueue取出一个Request;
(3)判断请求是否取消,若取消,则请求结束,返回步骤(2);若未取消,则通过Network执行Request,获取NetworkResponse;
(4)判断304相应且已经有响应传输即用验证是否更新的请求;若是,则请求结束,返回步骤(2);若否,则将NetworkResponse响应解析为Response响应;
(5)判断请求是否可以缓存并且缓存实体不为空;若否,则使用mDelivery传输响应结果(传送到Request中再进一步),返回步骤(2);若是,则将请求结果缓存实体加入到缓存mCache中,使用mDelivery传输响应结果(传送到Request中再进一步),返回步骤(2)。
进一步,步骤五中的数据分发、网络请求的Response处理具体包括以下步骤:
(1)Delivery的数据分发;包括:在RequestQueue中生成,作为参数传入CacheDispatcher和NetworkDispatcher线程中,担任分发数据结果的任务,起核心作用为postResponse和postError两个方法;
(2)判断传输正确的响应结果还是传输错误的返回信息;若传输正确的响应结果则将Request中是否接受到正确响应的标志位置为True;若传输错误的返回信息则将错误信息传送到Response中,并表示Response接收数据失败;
(3)利用execotor框架通过Handler更新主线程信息;
(4)判断Request是否取消,若不取消,则判断Response是否成功接收数据;若没有成功接收数据,则发送接收的错误信息到Request的连接失败的监听器中;若成功接收数据,则将Response信息传到Request中,进一步传到Request的成功连接监听器中;
(5)判断Response是否已经完整结束;若已完整结束,则调用Request的finish;
(6)运行当做参数传送的线程。
本发明的另一目的在于提供一种执行所述网络异步请求下载框架实现方法的网络异步请求下载框架实现系统,所述网络异步请求下载框架实现系统包括:
请求队列创建模块:用于创建RequestQueue;
请求添加模块:用于添加Request;
缓存管理模块:用于利用阻塞线程管理缓存;
网络处理模块:用于处理各种网络请求,放入队列;
数据分发模块:用于数据分发,处理网络请求的Response:分发者是对网络请求处理的最后一层,如果响应成功,则触发deliverResponse方法,如果不成功,则触发deliverError方法,处理结束,Request的生命周期即结束。
本发明的另一目的在于提供一种应用所述网络异步请求下载框架实现方法的计算机程序。
综上所述,本发明的优点及积极效果为:将请求加入到mCacheQueue中给CacheDispatcher处理可去掉无用的重复的网络请求;Volley构逢的相对完整的符合Http语义的缓存机制可根据Cache-Control和Expires首部计算缓存的过期时间,如果两个首部都存在情况下,以Cache-Control为准;利用If-None--Match和If-Modified-Since对过期缓存;或者不新鲜缓存,进行请求再验证,并处理304响应,更新缓存;默认的缓存实现,将缓存以文件的形式存储在Disk,程序退出后不会丢失。
异步机制控制比较复杂,需要同步机制。实现同步的机制主要有临界区、互斥、信号量和事件;临界区:通过对多线程的串行化访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。互斥量:采用互斥对象机制。只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享。互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。事件:通过通知操作的方式保持线程的同步,还可以方便实现对多个线程的优先级比较的操作。
本发明异步传输是面向字符的传输,而同步传输是面向比特的传输。异步传输的单位是字符而同步传输的单位是桢。异步传输通过字符起止的开始和停止码抓住再同步的机会,而同步传输则是以数据中抽取同步信息。异步传输对时序的要求较低,同步传输往往通过特定的时钟线路协调时序。异步传输相对于同步传输效率较低。
本发明异步传输与同步传输均存在上述基本同步问题:一般采用字符同步或帧同步信号识别传输字符信号或数据帧信号的开始和结束。两者之间的主要区别在于发送器或接收器之一是否向对方发送时钟同步信号。异步传输(Asynchronous Transmission)以字符为单位传输数据,采用位形式的字符同步信号,发送器和接收器具有相互独立的时钟(频率相差不能太多),并且两者中任一方都不向对方提供时钟同步信号。异步传输的发送器与接收器双方在数据可以传送之前不需要协调:发送器可以在任何时刻发送数据,而接收器必须随时都处于准备接收数据的状态。计算机主机与输入、输出设备之间一般采用异步传输方式,如键盘、典型的RS-232串口(用于计算机与调制解调器或ASCII码终端设备之间):发送方可以在任何时刻发送一个字符(由一个开始位引导,然后连续发完该字符的各位,后跟一个位长以上的哑位)。
附图说明
图1是本发明实施例提供的网络异步请求下载框架实现系统结构示意图;
图中:1、请求队列创建模块;2、请求添加模块;3、缓存管理模块;4、网络处理模块;5、数据分发模块。
图2是本发明实施例提供的网络异步请求下载框架实现方法流程图。
图3是本发明实施例提供的RequestQueue创建方法流程图。
图4是本发明实施例提供的Request添加方法流程图。
图5是本发明实施例提供的缓存管理方法流程图。
图6是本发明实施例提供的网络请求方法流程图。
图7是本发明实施例提供的数据分发方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
下面结合附图对本发明的应用原理作详细的描述。
如图1所示,本发明实施例提供的网络异步请求下载框架实现系统包括:请求队列创建模块1、请求添加模块2、缓存管理模块3、网络处理模块4、数据分发模块5。
请求队列创建模块1:用于创建RequestQueue。
请求添加模块2:用于添加Request。
缓存管理模块3:用于利用阻塞线程管理缓存。
网络处理模块4:用于处理各种网络请求,放入队列。
数据分发模块5:用于数据分发,处理网络请求的Response:分发者是对网络请求处理的最后一层,如果响应成功,则触发deliverResponse方法,如果不成功,则触发deliverError方法,处理结束,Request的生命周期即结束。
如图2所示,本发明实施例提供的网络异步请求下载框架方法具体包括以下步骤:
S101:创建RequestQueue,运行队列,并启动缓存调度器;
S102:向RequestQueue中添加一个Request,缓存调度器为第一层缓冲,判断添加的Request是否具有缓冲功能,若不具有则将请求直接进入队列;若需要,将请求加入到mCacheQueue中给CacheDispatcher处理;
S103:利用阻塞线程实现缓存管理;
S104:处理各种网络请求,放入队列;
S105:分发数据并处理网络请求的Response:分发者是对网络请求处理的最后一层,如果响应成功,则触发deliverResponse方法,如果不成功,则触发deliverError方法,处理结束,Request的生命周期即结束。
如图3所示,步骤S101中,本发明实施例提供的RequestQueue创建方法具体包括以下步骤:
(1)先申请一个存放缓存文件的地址;
(2)根据API生成HttpStack:API>9生成HurlStack,API=9,则HttpClientStack,其中HttpClientStack使用的是HttpClient,HurlStack使用的是HttpURLConnection;
(3)生成一个Network;
(4)生成一个RequestQueue,RequestQueue queue=new RequestQueue(newDiskBasedCache(cacheDir),network)。
如图3所示,步骤S101中,本发明实施例提供的队列运行具体以下步骤包括:
(1)stop()确保队列没有运行;
(2)开启CacheDispatcher,作为缓存队列处理器;
(3)开启符合线程池数量的NetworkDispatcher作为网络处理的线程,其数量为RequestQueue构造时传入的参数,默认为4个。
如图4所示,步骤S102中,所述RequestQueue具体包括:
(1)mWaitingRequests等待队列,类型是Map<String,Queue<Request<?>>>,当之前己经存在了和本次请求相同的URL会把相同的请求放到Queue<Request<?>>队列中,以URL作为关叇饲;
(2)mCurrentRequests夺放所有的请求,包括已经运行的和正在等待的Request;
(3)优先级阻塞队列,mCacheQueue表示的是缓存请求的队列,这个队列会传入到CacheDispatcher做判断;
(4)优先级阻塞队列,mNetWorkQueue表示的是请求网络连接的队列,主要传入到NetworkDispatcher线程中,里面的请求都会向服务器请求数据,(即这里才是唯一的跟服务器打交道的队列);
(5)NetworkDispatcher,和CacheDispatcher,阻塞式线程,不断循环处理Request;
(6)ResponseDelivery m Delivery,请求结果分发器,会把响应的结果返回到主线程的回调函数中。
如图4所示,步骤S102中,本发明实施例提供的CacheDispatcher处理mCacheQueue具体包括:
首先判断mWaitingRequests是否已经存在相同的URL请求;若存在则把当前请求放在等待队列中(一直等到已经存在的URL请求完毕后再把等待的相同请求全部放入到mCacheQueue中);若不存在,则mWaitingRequests中添加以URL做关键词的一组数据:mWaitingRequests.put(cacheKey,null);再把请求放入mWaitingRequests队列中。
如图5所示,步骤S103中,本发明实施例提供的利用阻塞线程实现缓存管理具体包括:
CacheDispatcher是一个不断循环的线程,以阻塞队列mCacheQueue为准,当从该队列中拿不到数据时会阻塞;
具体步骤包括:
(1)初始化缓存区;
(2)从阻塞队列mCacheQueue中取出一个Request;
(3)判断Request是否取消;若取消,则请求结束,返回步骤(2);若不取消,则从缓存mCache获取响应结果;
(4)判断缓存是否存在,若不存在,则将请求加入到mNetWorkQueue中,返回步骤(2);若存在,则判断缓存是否过期,若过期,则将请求加入到mNetWorkQueue中,返回步骤(2);若未过期,则将缓存结果解析为Response;
(5)判断缓存结果是否需要更新,若需要更新,则传输响应结果,并将Request加入到mNetWorkQueue到服务器验证是否更新,返回步骤(2);若不需要更新,则直接传输响应结果,返回步骤(2)。
如图6所示,步骤S104中,本发明实施例提供的网络请求处理具体包括:
NetworkDispatcher是网络请求真正发生的地方,将消息交给BasicNetwork进行处理,请求和结果都交最后由分发者进行处理;
具体包括以下步骤:
(1)缓存开始,若中途抛出错误,由mDelivery把错误信息传回到Request中VolleyError监听器中;
(2)从mNetWorkQueue取出一个Request;
(3)判断请求是否取消,若取消,则请求结束,返回步骤(2);若未取消,则通过Network执行Request,获取NetworkResponse;
(4)判断304相应且已经有响应传输即用验证是否更新的请求;若是,则请求结束,返回步骤(2);若否,则将NetworkResponse响应解析为Response响应;
(5)判断请求是否可以缓存并且缓存实体不为空;若否,则使用mDelivery传输响应结果(传送到Request中再进一步),返回步骤(2);若是,则将请求结果缓存实体加入到缓存mCache中,使用mDelivery传输响应结果(传送到Request中再进一步),返回步骤(2)。
如图7所示,步骤S105中,本发明实施例提供的数据分发、网络请求的Response处理具体包括以下步骤:
(1)Delivery的数据分发;
(2)判断传输正确的响应结果还是传输错误的返回信息;若传输正确的响应结果则将Request中是否接受到正确响应的标志位置为True;若传输错误的返回信息则将错误信息传送到Response中,并表示Response接收数据失败;
(3)利用execotor框架通过Handler更新主线程信息;
(4)判断Request是否取消,若不取消,则判断Response是否成功接收数据;若没有成功接收数据,则发送接收的错误信息到Request的连接失败的监听器中;若成功接收数据,则将Response信息传到Request中,进一步传到Request的成功连接监听器中;
(5)判断Response是否已经完整结束;若已完整结束,则调用Request的finish(这个方法会调用RequestQueue的finish,然后就会把mWaitingRequests的等待请求加入到mCacheRequests中);
(6)运行当做参数传送的线程。
步骤(1)中,本发明实施例提供的Delivery的数据分发包括:
在RequestQueue中生成,作为参数传入CacheDispatcher和NetworkDispatcher线程中,担任分发数据结果的任务,起核心作用为postResponse和postError两个方法。
本发明工作时,首先请求队列创建模块1创建一个RequestQueue,当RequestQueue被成功申请后会启动一个缓存调度器,利用这个缓存调度器实现缓存机制;其次请求添加模块2向RequestQueue中添加一个Request,缓存调度器为第一层缓冲,对于不需要缓存的请求直接进入队列,对于需要缓存的,则加入到mCacheQueue中给CacheDispatcher处理;缓存管理模块3利用阻塞线程实现缓存管理;网络处理模块4处理各种网络请求,放入队列;数据分发模块5分发数据并处理网络请求的Response:分发者是对网络请求处理的最后一层,如果响应成功,则触发deliverResponse方法,如果不成功,则触发deliverError方法,处理结束,Request的生命周期即结束。
应当注意,本发明的实施方式可以通过硬件、软件或者软件和硬件的结合实现。硬件部分可以利用专用逻辑实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件执行。本领域的普通技术人员可以理解上述的设备和方法可以使用计算机可执行指令和/或包含在处理器控制代码中实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本发明的设备及其模块可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合例如固件实现。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种网络异步请求下载框架实现方法,其特征在于,所述网络异步请求下载框架实现方法包括:
步骤一,创建RequestQueue,运行队列,并启动缓存调度器;
步骤二,向RequestQueue中添加一个Request,缓存调度器为第一层缓冲,判断添加的Request是否具有缓冲功能,若不具有则将请求直接进入队列;若需要,将请求加入到mCacheQueue中给CacheDispatcher处理;
步骤三,利用阻塞线程实现缓存管理;
步骤四,处理各种网络请求,放入队列;
步骤五,分发数据并处理网络请求的Response:分发者是对网络请求处理的最后一层,如果响应成功,则触发deliverResponse方法,如果不成功,则触发deliverError方法,处理结束,Request的生命周期即结束。
2.如权利要求1所述的网络异步请求下载框架实现方法,其特征在于,步骤一中的RequestQueue创建方法具体包括以下步骤:
(1)先申请一个存放缓存文件的地址;
(2)根据API生成HttpStack:API>9生成HurlStack,API=9,则HttpClientStack,其中HttpClientStack使用的是HttpClient,HurlStack使用的是HttpURLConnection;
(3)生成一个Network;
(4)生成一个RequestQueue,RequestQueue queue=new RequestQueue(newDiskBasedCache(cacheDir),network)。
3.如权利要求1所述的网络异步请求下载框架实现方法,其特征在于,步骤一中的队列运行具体以下步骤包括:
(1)stop()确保队列没有运行;
(2)开启CacheDispatcher,作为缓存队列处理器;
(3)开启符合线程池数量的NetworkDispatcher作为网络处理的线程,其数量为RequestQueue构造时传入的参数,默认为4个。
4.如权利要求1所述的网络异步请求下载框架实现方法,其特征在于,步骤二中的RequestQueue具体包括:
(1)mWaitingRequests等待队列,类型是Map<String,Queue<Request<?>>>,当之前己经存在了和本次请求相同的URL会把相同的请求放到Queue<Request<?>>队列中,以URL作为关叇饲;
(2)mCurrentRequests夺放所有的请求,包括已经运行的和正在等待的Request;
(3)优先级阻塞队列,mCacheQueue表示的是缓存请求的队列,这个队列会传入到CacheDispatcher做判断;
(4)优先级阻塞队列,mNetWorkQueue表示的是请求网络连接的队列,主要传入到NetworkDispatcher线程中,里面的请求都会向服务器请求数据,(即这里才是唯一的跟服务器打交道的队列);
(5)NetworkDispatcher,和CacheDispatcher,阻塞式线程,不断循环处理Request;
(6)ResponseDelivery m Delivery,请求结果分发器,会把响应的结果返回到主线程的回调函数中。
5.如权利要求1所述的网络异步请求下载框架实现方法,其特征在于,步骤二中的CacheDispatcher处理mCacheQueue具体包括:
首先判断mWaitingRequests是否已经存在相同的URL请求;若存在则把当前请求放在等待队列中;若不存在,则mWaitingRequests中添加以URL做关键词的一组数据:mWaitingRequests.put(cacheKey,null);再把请求放入mWaitingRequests队列中。
6.如权利要求1所述的网络异步请求下载框架实现方法,其特征在于,步骤三中的利用阻塞线程实现缓存管理具体包括:
(1)初始化缓存区;
(2)从阻塞队列mCacheQueue中取出一个Request;
(3)判断Request是否取消;若取消,则请求结束,返回步骤(2);若不取消,则从缓存mCache获取响应结果;
(4)判断缓存是否存在,若不存在,则将请求加入到mNetWorkQueue中,返回步骤(2);若存在,则判断缓存是否过期,若过期,则将请求加入到mNetWorkQueue中,返回步骤(2);若未过期,则将缓存结果解析为Response;
(5)判断缓存结果是否需要更新,若需要更新,则传输响应结果,并将Request加入到mNetWorkQueue到服务器验证是否更新,返回步骤(2);若不需要更新,则直接传输响应结果,返回步骤(2)。
7.如权利要求1所述的网络异步请求下载框架实现方法,其特征在于,步骤四中的网络请求处理具体包括:
(1)缓存开始,若中途抛出错误,由mDelivery把错误信息传回到Request中VolleyError监听器中;
(2)从mNetWorkQueue取出一个Request;
(3)判断请求是否取消,若取消,则请求结束,返回步骤(2);若未取消,则通过Network执行Request,获取NetworkResponse;
(4)判断304相应且已经有响应传输即用验证是否更新的请求;若是,则请求结束,返回步骤(2);若否,则将NetworkResponse响应解析为Response响应;
(5)判断请求是否可以缓存并且缓存实体不为空;若否,则使用mDelivery传输响应结果(传送到Request中再进一步),返回步骤(2);若是,则将请求结果缓存实体加入到缓存mCache中,使用mDelivery传输响应结果(传送到Request中再进一步),返回步骤(2)。
8.如权利要求1所述的网络异步请求下载框架实现方法,其特征在于,步骤五中的数据分发、网络请求的Response处理具体包括以下步骤:
(1)Delivery的数据分发;包括:在RequestQueue中生成,作为参数传入CacheDispatcher和NetworkDispatcher线程中,担任分发数据结果的任务,起核心作用为postResponse和postError两个方法;
(2)判断传输正确的响应结果还是传输错误的返回信息;若传输正确的响应结果则将Request中是否接受到正确响应的标志位置为True;若传输错误的返回信息则将错误信息传送到Response中,并表示Response接收数据失败;
(3)利用execotor框架通过Handler更新主线程信息;
(4)判断Request是否取消,若不取消,则判断Response是否成功接收数据;若没有成功接收数据,则发送接收的错误信息到Request的连接失败的监听器中;若成功接收数据,则将Response信息传到Request中,进一步传到Request的成功连接监听器中;
(5)判断Response是否已经完整结束;若已完整结束,则调用Request的finish;
(6)运行当做参数传送的线程。
9.一种执行权利要求1所述网络异步请求下载框架实现方法的网络异步请求下载框架实现系统,其特征在于,所述网络异步请求下载框架实现系统包括:
请求队列创建模块:用于创建RequestQueue;
请求添加模块:用于添加Request;
缓存管理模块:用于利用阻塞线程管理缓存;
网络处理模块:用于处理各种网络请求,放入队列;
数据分发模块:用于数据分发,处理网络请求的Response:分发者是对网络请求处理的最后一层,如果响应成功,则触发deliverResponse方法,如果不成功,则触发deliverError方法,处理结束,Request的生命周期即结束。
10.一种应用权利要求1~8任意一项所述网络异步请求下载框架实现方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910374412.4A CN110213336A (zh) | 2019-05-07 | 2019-05-07 | 一种网络异步请求下载框架实现系统及方法、计算机程序 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910374412.4A CN110213336A (zh) | 2019-05-07 | 2019-05-07 | 一种网络异步请求下载框架实现系统及方法、计算机程序 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110213336A true CN110213336A (zh) | 2019-09-06 |
Family
ID=67785554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910374412.4A Pending CN110213336A (zh) | 2019-05-07 | 2019-05-07 | 一种网络异步请求下载框架实现系统及方法、计算机程序 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110213336A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535205A (zh) * | 2021-07-22 | 2021-10-22 | 浪潮云信息技术股份公司 | 一种基于NIFI接口的WEB组件token定时更新实现方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102323894A (zh) * | 2011-09-08 | 2012-01-18 | 上海普元信息技术股份有限公司 | 企业分布式应用间实现非阻塞方式相互调用的系统及方法 |
CN103116634A (zh) * | 2012-06-12 | 2013-05-22 | 上海雷腾软件有限公司 | 支持高并发缓存任务队列的系统及其异步批量操作方法 |
CN103164273A (zh) * | 2012-09-06 | 2013-06-19 | 佳都新太科技股份有限公司 | 一种利用自扩展的阻塞算法将同步服务调用转换为异步并行式调用的方法 |
US20150161053A1 (en) * | 2013-12-09 | 2015-06-11 | International Business Machines Corporation | Bypassing a store-conditional request around a store queue |
CN109377159A (zh) * | 2018-09-19 | 2019-02-22 | 成都信息工程大学 | 一种软件建模过程实体演进系统及方法、处理器、终端 |
-
2019
- 2019-05-07 CN CN201910374412.4A patent/CN110213336A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102323894A (zh) * | 2011-09-08 | 2012-01-18 | 上海普元信息技术股份有限公司 | 企业分布式应用间实现非阻塞方式相互调用的系统及方法 |
CN103116634A (zh) * | 2012-06-12 | 2013-05-22 | 上海雷腾软件有限公司 | 支持高并发缓存任务队列的系统及其异步批量操作方法 |
CN103164273A (zh) * | 2012-09-06 | 2013-06-19 | 佳都新太科技股份有限公司 | 一种利用自扩展的阻塞算法将同步服务调用转换为异步并行式调用的方法 |
US20150161053A1 (en) * | 2013-12-09 | 2015-06-11 | International Business Machines Corporation | Bypassing a store-conditional request around a store queue |
CN109377159A (zh) * | 2018-09-19 | 2019-02-22 | 成都信息工程大学 | 一种软件建模过程实体演进系统及方法、处理器、终端 |
Non-Patent Citations (1)
Title |
---|
JAVAWEBSOA: ""Volley框架的流程图分析"", 《HTTPS://BLOG.CSDN.NET/ANDROIDMYLOVE/ARTICLE/DETAILS/42553643》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535205A (zh) * | 2021-07-22 | 2021-10-22 | 浪潮云信息技术股份公司 | 一种基于NIFI接口的WEB组件token定时更新实现方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8051179B2 (en) | Distributed session failover | |
US20070150584A1 (en) | Apparatus, system, and method for determining server utilization in hosted computing infrastructure | |
CN110741573B (zh) | 在区块链网络中选择性使用网络编码传播交易的方法和系统 | |
CN116302719A (zh) | 用于启用高可用性受管理故障转移服务的系统和方法 | |
CN110502583A (zh) | 分布式数据同步方法、装置、设备及可读存储介质 | |
Chun et al. | Mobius: unified messaging and data serving for mobile apps | |
WO2022142781A1 (zh) | 区块链的异步落账方法、装置、介质及电子设备 | |
JP2004303211A (ja) | データベース結果および導出オブジェクトをキャッシュし、無効にするためのシステムおよび方法 | |
CN112751847A (zh) | 接口调用请求的处理方法、装置、电子设备及存储介质 | |
EP2838243A1 (en) | Capability aggregation and exposure method and system | |
CN113179324B (zh) | 一种区块链节点及其执行的业务处理方法 | |
CN109309728A (zh) | 一种数据处理方法以及相关装置 | |
CN109522501A (zh) | 页面内容管理方法及其装置 | |
JP2012146083A (ja) | セッション管理システム、セッション管理装置、サーバ装置およびセッション管理方法 | |
Du et al. | Proposal of GRPC as a new northbound API for application layer communication efficiency in SDN | |
WO2013097098A1 (zh) | 数据处理方法、图形处理器gpu及第一节点设备 | |
US9817594B2 (en) | System and method for broadcasting data to multiple hardware forwarding engines | |
CN110213336A (zh) | 一种网络异步请求下载框架实现系统及方法、计算机程序 | |
CN115134352A (zh) | 一种埋点数据上传方法、装置、设备及介质 | |
Chesson | The network UNIX system | |
CN112965837B (zh) | 配置和服务热重载更新方法、装置、计算机设备及存储介质 | |
CN106131162A (zh) | 一种基于iocp机制实现网络服务代理的方法 | |
US20230336368A1 (en) | Block chain-based data processing method and related apparatus | |
Salem et al. | Scalable data-oriented replication with flexible consistency in real-time data systems | |
Nayate et al. | Transparent information dissemination |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190906 |
|
RJ01 | Rejection of invention patent application after publication |