发明内容
基于此,有必要针对上述技术问题,提供一种基于HTTP请求的数据处理方法和装置,提高响应时间和响应数量之间的平衡。
一种基于HTTP请求的数据处理方法,所述方法包括:
接收客户端发送的HTTP请求,建立与所述客户端的网络连接,所述客户端为一个或多个;
判断HTTP请求对应的读事件是否具备执行条件,如果具备,则为具备读事件执行条件的HTTP请求分配线程;
在通过所述线程响应事件的过程中,当读和/或写事件不具备执行条件时,等待所述读和/或写事件具备执行条件,继续通过所述线程响应事件。
在其中一个实施例中,所述方法还包括:
将响应完毕的HTTP请求对应的线程返回至线程池。
在其中一个实施例中,所述判断HTTP请求对应的读事件是否具备执行条件的步骤之前,还包括:建立事件驱动线程;
所述判断HTTP请求对应的读事件是否具备执行条件的步骤包括:
所述事件驱动线程接收客户端发送的数据;
当第一HTTP请求对应的数据具备读事件执行条件时,为所述第一HTTP请求分配线程。
在其中一个实施例中,所述网络连接为持久连接或非持久连接。
在其中一个实施例中,通过Servlet引擎接收客户端发送的HTTP请求。
一种基于HTTP请求的数据处理装置,所述装置包括:
连接模块,用于接收客户端发送的HTTP请求,建立与所述客户端的网络连接,所述客户端为一个或多个;
分配模块,用于判断HTTP请求对应的读事件是否具备执行条件,如果具备,则为具备读事件执行条件的HTTP请求分配线程;
响应模块,用于在通过所述线程响应事件的过程中,当读和/或写事件不具备执行条件时,等待所述读和/或写事件具备执行条件,继续通过所述线程响应事件。
在其中一个实施例中,所述装置还包括:
返回模块,用于将响应完毕的HTTP请求对应的线程返回至线程池。
在其中一个实施例中,所述装置还包括:
建立模块,用于建立事件驱动线程;
所述分配模块还用于所述事件驱动线程接收客户端发送的数据,当第一HTTP请求对应的数据具备读事件执行条件时,为所述第一HTTP请求分配线程。
在其中一个实施例中,所述网络连接为持久连接或非持久连接。
在其中一个实施例中,所述连接模块通过Servlet引擎接收客户端发送的HTTP请求。
上述基于HTTP请求的数据处理方法和装置,通过接收客户端发送的HTTP请求,建立与客户端的网络连接,客户端为一个或多个,判断HTTP请求对应的读事件是否具备执行条件,如果具备,则为具备读事件执行条件的HTTP请求分配线程,在通过线程响应事件的过程中,当读和/或写事件不具备执行条件时,等待读和/或写事件具备执行条件,继续通过线程响应事件。只有HTTP请求对应的读事件具备执行条件,才会为HTTP请求分配线程,避免分配线程后读事件不能执行使得线程空闲的情况,提高了线程的利用率,使得线程可服务于更多的请求,在读写事件不能执行时继续保持线程,避免线程切换时,系统需要恢复线程相关的数据状态,准备线程运行数据造成的响应时间的延长,加快了响应的速度,提高了响应时间和响应数量之间的平衡。
具体实施方式
在一个实施例中,如图1所示,提供了一种基于HTTP请求的数据处理方法,应用于服务器中,包括以下步骤:
步骤S110,接收客户端发送的HTTP请求,建立与客户端的网络连接,客户端为一个或多个。
具体的,当客户端需要服务器提供服务时,会向服务器发送HTTP请求,HTTP请求是指从客户端到服务器端的请求消息。包括:消息首行中,对资源的请求方法、资源的标识符及使用的协议。http属于Tcp/Ip模型中的应用层协议,当客户端与服务器通信时,服务器先建立与客户端的网络连接。由于服务器可服务于多个客户端,在有多个客户端时,分别与各个客户端建立网络连接。一个客户端可以向服务器发送多个请求。
步骤S120,判断HTTP请求对应的读事件是否具备执行条件,如果具备,则为具备读事件执行条件的HTTP请求分配线程。
具体的,当客户端传送了数据,服务器需要读取的时候,系统会发出读事件消息,当外部传入的数据已经被硬件处理,软件可以读取,并且传入的数据已经符合HTTP请求需要的数据,则读事件具备执行条件,否则如果数据只接收到部分不符合HTTP请求需要的完整数据或软件还不能读取数据,则为读事件不具备执行条件。由于同一时间服务器可接收到多个HTTP请求,会判断哪些HTTP请求对应的数据满足读事件执行条件,对于满足读事件执行条件的HTTP请求,会为其分配对应的线程。本实施例中,对于读事件具备执行条件时,才会分配线程,而不是在HTTP请求到来时就分配线程,分配线程的先后顺序是按照满足读事件的执行条件来分配,避免分配线程后读事件不能执行使得线程空闲的情况,提高了线程的利用率。
步骤S130,在通过线程响应事件的过程中,当读和/或写事件不具备执行条件时,等待读和/或写事件具备执行条件,继续通过线程响应事件。
具体的,在通过线程响应事件的过程中,如果此时发生读数据不够,和/或者写数据不能完成,系统并不放弃此线程,而是等待读和/或写事件具备执行条件,然后继续通过此线程响应事件。客户端/服务器执行读和/或写事件时,一般是由于网络或者系统处理能力才会导致阻塞,这种阻塞时间往往非常短,如果此时放弃线程会得不偿失,导致处理过程出现大量的线程切换,线程切换时,系统需要恢复线程相关的数据状态,准备线程运行数据,造成响应时间的延长。本实施例在读和/或写事件不具备执行条件时,等待读和/或写事件具备执行条件,避免了大量的线程切换耗时,加快了响应的速度。
本实施例中,通过接收客户端发送的HTTP请求,建立与客户端的网络连接,客户端为一个或多个,判断HTTP请求对应的读事件是否具备执行条件,如果具备,则为具备读事件执行条件的HTTP请求分配线程,在通过线程响应事件的过程中,当读和/或写事件不具备执行条件时,等待读和/或写事件具备执行条件,继续通过线程响应事件。只有HTTP请求对应的读事件具备执行条件,才会为HTTP请求分配线程,避免分配线程后读事件不能执行使得线程空闲的情况,提高了线程的利用率,使得线程可服务于更多的请求,在读写事件不能执行时继续保持线程,避免线程切换时,系统需要恢复线程相关的数据状态,准备线程运行数据造成的响应时间的延长,加快了响应的速度,提高了响应时间和响应数量之间的平衡。
在一个实施例中,所述方法还包括:将响应完毕的HTTP请求对应的线程返回至线程池。
具体的,一旦HTTP请求响应完毕,它对应的线程就会返回至线程池,供其它请求调用。即使此时采用的是持久连接形式,也会返回线程池。因为此时客户端已经得到响应,客户端发送下一个HTTP请求可能会在一段时间后,将响应完毕的HTTP请求对应的线程不会影响用户的响应体验,而此线程又可以服务其它客户端发送的HTTP请求使得线程不会被一个客户端的连接独占,可服务于更多的客户端,提高了线程的利用率。持久连接是指利用一个连接传输多个HTTP请求与响应。
在一个实施例中,如图2所示,步骤S120之前,还包括:建立事件驱动线程;判断HTTP请求对应的读事件是否具备执行条件的步骤包括:
步骤S121,事件驱动线程接收客户端发送的数据。
步骤S122,当第一HTTP请求对应的数据具备读事件执行条件时,为第一HTTP请求分配线程。
具体的,事件驱动线程在系统初始化的时候建立,用于接收各个客户端发送的数据,并且判断接收到的数据是否使得其中的某个HTTP请求对应的数据具备读事件执行条件,即数据准备就绪。如果第一HTTP请求对应的数据具备读事件执行条件,则为第一HTTP请求分配线程。通过一个独立的线程进行读事件执行条件的判断,并选取满足执行条件的读事件,为对应的HTTP请求分配线程,事件驱动线程在系统中从初始化时就建立并始终存在,使得一有请求到来就可立即处理,提高了线程的分配效率。
在一个实施例中,网络连接为持久连接或非持久连接。
具体的,终端在发送HTTP请求时,可携带网络连接参数,选择建立持久连接或非持久连接,服务器收到HTTP请求,根据网络连接参数建立对应的连接。持久连接是指利用一个连接传输多个HTTP请求与响应。
在一个实施例中,通过Servlet引擎接收客户端发送的HTTP请求。
具体的,Servlet引擎是用Java语言编写的Web服务器引擎,在其上可以部署并开发程序,这种开发方式被Java企业版予以规范,其中页面脚本语言JSP(JavaServerPages,java服务器页面)是其中一种部署方式。Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,Servlet拥有面向对象Java语言的所有优势,简化了开发人员的操作,使得开发更方便快捷。
在一个具体的实施例中,如图3所示,基于HTTP请求的数据处理方法包括以下步骤:
步骤S210,在系统初始化时建立事件驱动线程。
步骤S220,接收各个客户端发送的HTTP请求,建立与客户端的持久连接,所述客户端为一个或多个。
步骤S230,事件驱动线程接收客户端发送的数据,当第一HTTP请求对应的数据具备读事件执行条件时,为第一HTTP请求分配线程。
步骤S240,线程读取客户端发送的数据,根据读取的数据进行逻辑业务处理。
步骤S250,在进行逻辑业务处理的过程中,如果出现读和/或写事件不具备执行条件,则等待读和/或写事件具备执行条件,继续通过所述线程响应事件。
步骤S260,将响应完毕的HTTP请求对应的线程返回至线程池。
在一个实施例中,如图4所示,提供了一种基于HTTP请求的数据处理装置,包括:
连接模块310,用于接收客户端发送的HTTP请求,建立与所述客户端的网络连接,所述客户端为一个或多个;
分配模块320,用于判断HTTP请求对应的读事件是否具备执行条件,如果具备,则为具备读事件执行条件的HTTP请求分配线程;
响应模块330,用于在通过所述线程响应事件的过程中,当读和/或写事件不具备执行条件时,等待所述读和/或写事件具备执行条件,继续通过所述线程响应事件。
在一个实施例中,如图5所示,所述装置还包括:
返回模块340,用于将响应完毕的HTTP请求对应的线程返回至线程池。
在一个实施例中,如图6所示,所述装置还包括:建立模块350,用于建立事件驱动线程。分配模块320还用于事件驱动线程接收客户端发送的数据,当第一HTTP请求对应的数据具备读事件执行条件时,为第一HTTP请求分配线程。
在一个实施例中,网络连接为持久连接或非持久连接。
在一个实施例中,连接模块310通过Servlet引擎接收客户端发送的HTTP请求。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。