CN101621532B - 一种使用线程池实现超文本传输协议应用的方法 - Google Patents
一种使用线程池实现超文本传输协议应用的方法 Download PDFInfo
- Publication number
- CN101621532B CN101621532B CN200810129127A CN200810129127A CN101621532B CN 101621532 B CN101621532 B CN 101621532B CN 200810129127 A CN200810129127 A CN 200810129127A CN 200810129127 A CN200810129127 A CN 200810129127A CN 101621532 B CN101621532 B CN 101621532B
- Authority
- CN
- China
- Prior art keywords
- http
- thread
- message
- link
- receiving thread
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种使用线程池实现超文本传输协议(HTTP)应用的方法,对HTTP应用进行模式配置;HTTP应用触发链接TCP链路和HTTP链路,并启动HTTP应用的发送计数器和接收计数器;所述HTTP链路如果收到HTTP应用提交的要发送的消息,则通过发送线程处理发送该消息,如果收到对端TCP链路的消息,则通过接收线程处理接收该消息;所述发送线程和接收线程在处理过程中具体根据所述HTTP应用的模式和所述消息的消息类型进行区别处理。利用本发明,使得HTTP应用能同时适用于非持久连接、带流水线的持久连接和不带流水线的持久连接三种HTTP模式。
Description
技术领域
本发明涉及超文本传输协议(HTTP,Hypertext Transfer Protocol)应用技术,尤其是指一种使用线程池实现HTTP应用的方法。
背景技术
HTTP是应用层协议,由于其简捷、快速的应用方式,适用于分布式和合作式超媒体信息系统。自1990年起,HTTP就已经被应用于WWW全球信息服务系统。HTTP允许使用自由答复的方法表明请求目的,它建立在统一资源识别器(URI)提供的参考原则下,作为一个地址(URL)或名字(URN),用以标志采用哪种方法,它用类似于网络邮件和多用途网际邮件扩充协议(MIME)的格式传递消息。HTTP也可用作普通协议,实现用户代理与连接其它Internet服务,如SMTP、NNTP、FTP、GOPHER及WAIS等的代理服务器或网关之间的通信,允许基本的超媒体访问各种应用提供的资源,同时简化了用户代理系统的实施。HTTP是一种请求/响应式的协议。一个客户端与服务器建立连接后,发送一个请求给服务器,请求的格式是:统一资源标识符(URI)、协议版本号,后面是类似MIME的信息,包括请求修饰符、客户端信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式是:一个状态行包括信息的协议版本号、一个成功或错误的代码,后面也是类似MIME的信息,包括服务器信息、实体信息和可能的内容。总之,请求消息和应答消息的格式是不相同的。
HTTP的第一版本HTTP/0.9是一种简单的用于网络间原始数据传输的协议,而由RFC 1945定义的HTTP/1.0是在原HTTP/0.9的基础上,有了进一步的改进,允许消息以类MIME信息格式存在,包括请求/响应范式中 的已传输数据和修饰符等方面的信息。但是,HTTP/1.0没有充分考虑到分层代理服务器、高速缓冲存储器、持久连接需求或虚拟主机等方面的效能。相比之下,HTTP/1.1要求更加严格以确保服务的可靠性。其具体其规范详见[RFC 1945]和[RFC 2616]。
HTTP/1.0和HTTP/1.1都把传输控制协议(TCP,Transmission ControlProtocol)作为底层的传输协议。HTTP客户端首先发起建立与服务器之间的TCP链路。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字(Socket)来访问TCP。客户端往自己的Socket发送HTTP请求消息,也从自己的Socket接收HTTP响应消息。类似地,服务器从自己的Socket接收HTTP请求消息,也往自己的Socket发送HTTP响应消息。客户端或服务器一旦把某个消息送入各自的Socket,这个消息就完全落入TCP的控制之中。TCP给HTTP提供一个可靠的数据传输服务,这意味着由客户端发出的每个HTTP请求消息最终将无损地到达服务器,由服务器发出的每个HTTP响应消息最终也将无损地到达客户端。可从中看到分层网络体系结构的一个明显优势:HTTP不必担心数据会丢失,也无需关心TCP如何从数据的丢失和错序中恢复出来的细节,这些是TCP和协议栈中更低协议层的任务。
TCP还使用一个拥塞控制机制,该机制迫使每个新的TCP链路一开始以相对缓慢的速率传输数据,然而只要网络不拥塞,每个连接可以迅速上升到相对较高的速率。这个慢速传输的初始阶段称为缓启动。需要注意的是,在向客户端发送所请求文件的同时,服务器并没有存储关于该客户端的任何状态信息,即便某个客户端在几秒钟内再次请求同一个对象,服务器也不会向客户端发这样的相应:自己刚刚给它发送了这个对象。相反,服务器需重新发送这个对象。因此,HTTP服务器不维护客户端的状态信息,是一个无状态的协议。
HTTP应用的连接模式有三种:一种为非持久连接,另外一种是带流水线的持久连接,第三种是不带流水线的持久连接。HTTP/1.0使用非持久连 接,HTTP/1.1默认使用持久连接。非持久连接模式如图1所示,在该模式下,每次客户端发送请求(HTTP REQ)给HTTP服务器,HTTP服务器返回应答(HTTP RSP)给HTTP客户端以后,TCP链路就相应地被关闭,下次传送发送消息和应答消息的时候就需要重新建立HTTP客户端和HTTP服务端之间的TCP链路,也就是说每个连接都没有持续到可用于传送其他对象,每个TCP链路只用于传输一个请求消息和一个响应消息。非持久连接有以下缺点:首先,客户端得为每个待请求的对象建立并维护一个新的连接。对于每个这样的连接,TCP得在客户端和服务器端分配TCP缓冲区,并维持TCP变量。对于有可能同时为来自数百个不同客户端的请求提供服务的web服务器来说,这会严重增加其负担。其次,每个对象都有2个往返时间(RTT,round trip time)的响应延长——一个RTT用于建立TCP链路,另一个RTT用于请求和接收对象。最后,每个对象都遭受TCP缓启动,因为每个TCP链路都起始于缓启动阶段。其中,RTT是一个小分组从客户端主机游动到服务器主机再返回客户端主机所花的时间。RTT包括分组传播延迟、在中间路由器和交换机土的分组排队延迟以及分组处理延迟。
在持久连接情况下,服务器在发出响应后让TCP链路继续打开着。同一对客户端/服务器之间的后续请求和响应可以通过这个连接发送。通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。持久连接分为不带流水线的持久连接和带流水线的持久连接。
不带流水线的持久连接如图2所示,客户端只在收到前一个请求的响应后才发出新的请求。这种情况下,web页面所引用的每个对象都经历1个RTT的延迟,用于请求和接收该对象。与非持久连接2个RTT的延迟相比,不带流水线的持久连接已有所改善,不过带流水线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服务器资源便闲置了。
HTTP/1.1的默认模式使用带流水线的持久连接。带流水线的持久连接 模式如图3所示,HTTP客户端每碰到一个引用就立即发出一个请求,因而HTTP客户端可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。如果所有的请求和响应都是紧挨着发送的,那么所有引用到的对象一共只经历1个RTT的延迟,而不是像不带流水线的版本那样,每个引用到的对象都各有1个RTT的延迟。另外,带流水线的持久连接中服务器空等请求的时间比较少。与非持久连接相比,无论是哪种持久连接,除降低了1个RTT的响应延迟外,缓启动延迟也比较小。其原因在于既然各个对象使用同一个TCP链路,服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反,服务器可以按照第一个对象发送完毕时的速率开始发送下一个对象。
但是,现有技术中,尚没有能够同时适用于这三种HTTP模式的HTTP应用方法。
发明内容
有鉴于此,本发明的主要目的在于提供一种使用线程池实现HTTP应用的方法,利用本发明,使得HTTP应用能够同时适用于非持久连接、带流水线的持久连接和不带流水线的持久连接这三种HTTP模式。
为达到上述目的,本发明的技术方案是这样实现的:
一种使用线程池实现超文本传输协议HTTP应用的方法,该方法包括以下步骤:
A、对HTTP应用进行模式配置;
B、HTTP应用触发链接TCP链路和HTTP链路,并启动HTTP应用的发送计数器和接收计数器;
C、所述HTTP链路如果收到HTTP应用提交的要发送的消息,则通过发送线程处理发送该消息,如果收到对端TCP链路的消息,则通过接收线程处理接收该消息;所述发送线程和接收线程在处理过程中具体根据所述HTTP应用的模式和所述消息的消息类型进行区别处理,其中:对于非持久 连接模式,在发送完应答消息或接收完应答消息后,关闭对应的HTTP链路和TCP链路;对于带流水线的持久连接模式,则正常发送或接收所述消息;对于不带流水线的持久连接模式,则通过所述发送计数器和接收计数器分别统计发送消息数和接收消息数,并根据比较所述发送计数器和接收计数器的统计值控制消息的发送和接收。
进一步地,所述步骤C中,如果所述消息的种类为请求消息,则所述发送线程对该消息进行处理发送的具体过程包括:确定HTTP应用的模式,如果为非持久连接,则通过套接字Socket将所述请求消息发给通信对端的对应接收线程;如果为带流水线的持久连接,则通过Socket将所述请求消息发给通信对端的对应接收线程;如果为不带流水线的持久连接,则判断HTTP的发送计数器的值是否等于接收计数器的值,若是,通过Socket将所述请求消息发给通信对端的与所述HTTP链路的序号对应的接收线程,之后把所述发送计数器的值加1;否则,不处理所述请求消息,直到上一个请求的应答到达才触发发送。
进一步地,步骤C中:所述通信对端的接收线程收到请求消息后,确定HTTP应用的模式,如果为非持久连接,把所述请求消息发给HTTP应用处理;如果为带流水线的持久连接,则把所述请求消息发给HTTP应用处理;如果为不带流水线的持久连接,判断HTTP发送计数器的值是否等于接收计数器的值,若等于,把所述请求消息发给HTTP应用处理,之后把所述接收计数器的值加1;否则关闭所述HTTP链路。
较佳地,所述步骤C中,如果所述消息的种类为应答消息,则所述发送线程对该消息进行处理发送的具体过程包括:确定HTTP应用的模式,如果为非持久连接,则通过Socket将所述应答消息发给通信对端的对应接收线程,之后关闭所述HTTP链路和TCP链路;如果为带流水线的持久连接,则通过Socket将所述应答消息发给通信对端的对应接收线程;如果为不带流水线的持久连接,则判断HTTP的发送计数器加1后的值是否等于接收计数器的值,若是,通过Socket将所述应答消息发送给通信对端的对应接收线程,并把所述发送计数器的值加1;否则,关闭所述HTTP链路和TCP链 路。
较佳地,步骤C中,所述通信对端的接收线程收到应答消息后,确定HTTP应用的模式,如果是非持久连接,把所述应答消息发给HTTP应用处理,然后关闭所述HTTP链路和TCP链路;如果是带流水线的持久连接,则把所述应答消息发给HTTP应用处理;如果是不带流水线的持久连接,则判断HTTP发送计数器的值是否等于接收计数器加1后的值,若等于,把所述应答消息发给HTTP应用处理,之后把所述接收计数器的值加1;否则关闭所述HTTP链路和TCP链路。
进一步地,在步骤A中进一步配置HTTP链路与发送线程和接收线程的关系,在发送或接收消息时,通过所述HTTP链路对应的发送线程或接收线程进行处理。
进一步地,配置的HTTP链路与发送线程和接收线程的关系为:发送线程管理的HTTP链路的序号为:第一整数与发送线程总个数的积与发送线程编号的和,所述第一整数的范围为:大于等于0小于等于每个发送线程管理的HTTP链路消息的总个数值减去1得到的差;接收线程管理的HTTP链路的序号为:第二整数与接收线程总个数的积与接收线程编号的和,所述第二整数的范围为:大于等于0小于等于每个接收线程管理的HTTP链路消息的总个数值减去1得到的差。
较佳地,所述接收线程编号满足以下关系:所述HTTP链路的序号减去接收线程编号的差除以接收线程总个数得到的商为整数,且所得到的整数小于每个接收线程最多可以管理的消息数。
较佳地,所述发送线程编号满足以下关系:所述HTTP链路的序号减去发送线程编号的差除以发送线程总个数得到的商为整数,且所述整数小于每个发送线程最多可以管理的消息个数。
进一步地,所述TCP链路通过Socket将收到的消息发送给接收线程,且接收线程调用select或poll函数获得所述消息。
本发明在HTTP应用中引入了发送计数器和接收计数器,通过对发送计 数器和接收计数器的值进行比较,使得HTTP应用能够同时应用于非持久连接、带流水线的持久连接和不带流水线的持久连接这三种模式;另外,本发明引入了由多个发送线程和多个接收线程组成的线程池,每个发送线程和每个接收线程均同时管理多条HTTP链路,且不论是发送线程还是接收线程对数据的处理均是并行的,相互之间不影响,这样就提高了消息处理的效率;同时,发送线程和接收线程所管理的每条HTTP链路既可以发送接收请求信息,又可以发送接收应答信息,HTTP应用配置管理很多条HTTP链路,所以HTTP应用既可以作为客户端,又可以作为服务器端;另外,本发明由于在接收消息的时候,调用了select或poll函数,可以主动快速接收数据,提高了接收消息的效率,而不是像现有技术一样因为被动等待数据的到来而降低接收效率;本发明采用了发送线程和接收线程,同时建立了HTTP链路与发送线程和接收线程之间的关系,对链路管理的这种方式使得能够管理更多的HTTP链路,提高了链路管理的扩展性且管理起来更加方便。
附图说明
图1为非持久连接的HTTP大致流程示意图;
图2为不带流水线的持久连接的HTTP大致流程示意图;
图3为带流水线的持久连接的HTTP大致流程示意图;
图4A为本发明使用线程池实现HTTP应用的方法流程示意图;
图4B为图4A的方法流程中B部分所代表的方法流程示意图;
图5A为本发明一实施例的方法流程示意图;
图5B为图5A的方法流程中B部分所代表的方法流程示意图;
图6为配置的HTTP链路与发送和接收线程的关系示意图。
具体实施方式
下面将结合附图,对本发明的具体实施作进一步详细的说明。
本发明使用线程池实现HTTP应用的方法流程如图4所示,包括以下步 骤:
步骤401、事先对HTTP应用进行模式配置和HTTP链路与发送和接收线程的关系配置。
这里,HTTP的应用模式有三种,一种为非持久连接,另外一种是带流水线的持久连接,第三种是不带流水线的持久连接。
另外,HTTP链路与发送和接收线程的关系可以设定为:假设所述HTTP应用配置管理m个HTTP链路,发送线程池总共包括a个发送线程,每个发送线程管理m/a个HTTP链路的消息发送,假设发送线程的序号为i,则发送线程池管理的HTTP链路的序号为i、i+a、i+2×a、...、i+(m/a-1)×a,其中i的取值范围为0到a-1;接收线程池总共包括b个接收线程,每个接收线程管理m/b个HTTP链路的消息发送,假设接收线程的序号为j,它管理的HTTP链路的序号j、j+b、j+2×b、...、i+(m/b-1)×b,其中j的取值范围为0到b-1。
这里,建立了HTTP链路与发送线程和接收线程之间的关系,对链路管理的这种方式使得能够管理更多的HTTP链路,提高了链路管理的扩展性。
步骤402、HTTP应用触发链接TCP链路,并启动HTTP应用的发送计数器和接收计数器。
这里,触发链接TCP链路指的是客户端向服务端发起TCP链接,服务端接收客户端的链接。
步骤403、HTTP应用的特定序号的HTTP链路接收到消息后,根据消息格式判断接收到的是否是请求消息,若是请求消息,则说明此时本地的通信端为客户端,所以将所接收到的请求消息发送到与所述HTTP链路的序号对应的发送线程的消息队列中后执行步骤404a~步骤410′a,或步骤404a~步骤410″a;若是应答消息,说明此时本地的通信端为服务器端,则参见图4B,将所接收到的应答消息发送到与所述HTTP链路的序号对应的发送线程的消息队列中后执行步骤404b~步骤410′b,或步骤404b~步骤410″b。
这里,所述HTTP链路的序号=发送线程编号+x×发送线程的总个数,且 x小于每个发送线程最多可以管理的消息个数,x为整数。
步骤404a、所述发送线程将所述请求消息插入与所述HTTP链路的序号对应的发送消息缓冲区。
步骤405a、所述发送线程根据所述HTTP链路的配置属性确定HTTP的模式,如果为非持久连接的HTTP,则执行步骤406′a;如果是带流水线的持久连接的HTTP,则执行步骤406″a;如果是不带流水线的持久连接的HTTP,则执行步骤406″′a。
步骤406′a、如果是非持久连接的HTTP,所述发送线程直接将发送消息缓冲区的所述请求消息发给所述HTTP链路的序号对应的Socket,之后执行步骤407a。
步骤406″a、如果是带流水线的持久连接的HTTP,所述发送线程直接将发送消息缓冲区的所述请求消息发给所述HTTP链路的序号对应的Socket,之后执行步骤407a。
步骤406″′a、如果是不带流水线的持久连接的HTTP,所述发送线程判断HTTP的发送计数器的值是否等于接收计数器的值,若是,所述发送线程将发送消息缓冲区的所述请求消息发给与所述HTTP链路的序号对应的服务器端Socket,并把所述发送计数器的值加1,之后执行步骤407a;否则,将所述请求消息放在发送缓冲区不处理,等待上一个请求的应答到达才触发发送。
步骤407a、所述Socket将所述请求消息发给与自身对应的Socket,即服务器端的Socket,后续的步骤由服务器端执行;在服务器端,与所述HTTP链路的序号对应的接收线程调用select或poll从与所述Socket对应的Socket获得所述请求消息。
这里,所述HTTP链路的序号=接收线程编号+y×接收线程总个数,其中,y小于每个接收线程最多可以管理的消息数,y为整数。
另外,select或poll是现有技术中从Socket主动接收数据的两种函数,由于此处调用了这两种函数,可以快速接收数据,因此提高了接收消息的效 率,而不是像现有技术被动地等待数据的到来,缩短了数据接收的时间。select或poll的具体功能属于现有技术,在此不再赘述。
步骤408a、所述接收线程将所述请求消息插入与所述HTTP链路的序号对应的接收消息缓冲区。
步骤409a、所述接收线程根据所述HTTP链路的配置属性确定HTTP的模式,若是非持久连接的HTTP,则执行步骤410′a;若是带流水线的持久连接的HTTP,则执行步骤410″a;若是不带流水线的持久连接的HTTP,则执行步骤410″′a.
步骤410′a、所述接收线程把所述接收消息缓冲区的所述请求消息发给HTTP应用处理,之后执行步骤402。
步骤410″a、所述接收线程把所述接收消息缓冲区的所述请求消息发给HTTP应用处理,然后执行步骤403。
步骤410″′a、所述接收线程判断HTTP发送计数器的值是否等于接收计数器的值,若等于,把所述接收消息缓冲区的所述请求消息发给HTTP应用处理,之后把所述接收计数器的值加1,然后执行步骤403;否则关闭所述HTTP链路。
参见图4B,在步骤403中,如果接收到的是应答消息,则将所接收到的应答消息发送到与所述HTTP链路的序号对应的发送线程的消息队列中,并执行下述步骤:
步骤404b、所述发送线程将所述应答消息插入与所述HTTP链路的序号对应的发送消息缓冲区。
步骤405b、所述发送线程根据所述HTTP链路的配置属性确定HTTP的模式,如果是非持久连接的HTTP,则执行步骤406′b;如果是带流水线的持久连接的HTTP,则执行步骤406″b;如果是不带流水线的持久连接的HTTP,则执行步骤406″′b。
步骤406′b、如果是非持久连接的HTTP,所述发送线程直接发送缓冲区的所述应答消息给与所述HTTP链路的序号对应的Socket,之后关闭所述 HTTP链路及TCP链路,然后执行步骤407b。
步骤406″b、如果是带流水线的持久连接的HTTP,所述发送线程直接发送缓冲区的所述应答消息给与所述HTTP链路的序号对应的Socket,然后执行步骤407b。
步骤406″′b、如果是不带流水线的持久连接的HTTP,所述发送线程判断HTTP的发送计数器加1后的值是否等于接收计数器的值,若是,发送缓冲区的所述应答消息给与所述HTTP链路的序号对应的Socket,并把所述发送计数器的值加1,之后执行步骤407b;否则,关闭所述HTTP链路。
步骤407b、所述Socket将所述应答消息发给与自身对应的Socket即客户端的Socket,后续的步骤由客户端执行;在客户端,与所述HTTP链路的序号对应的接收线程调用select或poll从与所述Socket对应的Socket获得所述应答消息。步骤407b及其以后的步骤由客户端执行。
同理,所述HTTP链路的序号=接收线程编号+y×接收线程总个数,其中,y小于每个接收线程最多可以管理的消息数,y为整数。
步骤408b、所述接收线程将所述应答消息插入与所述HTTP链路的序号对应的接收消息缓冲区。
步骤409b、所述接收线程根据所述HTTP链路的配置属性确定HTTP的模式,若是非持久连接的HTTP,则执行步骤410′b;若是带流水线的持久连接的HTTP,则执行步骤410″b;若是不带流水线的持久连接的HTTP,则执行步骤410″′b。
步骤410′b、所述接收线程把所述接收消息缓冲区的所述应答消息发给HTTP应用处理,关闭所述HTTP链路及TCP链路后执行步骤402;
步骤410″b、所述接收线程把所述接收消息缓冲区的所述应答消息发给HTTP应用处理,然后执行步骤403。步骤410″′b、所述接收线程判断HTTP发送计数器的值是否等于接收计数器加1后的值,若等于,把所述接收消息缓冲区的所述应答消息发给HTTP应用处理,之后把所述接收计数器的值加1,然后执行步骤403;否则关闭所述HTTP链路。
本发明一实施例的方法流程如图5所示,包括以下步骤:
步骤501、事先对HTTP应用进行模式配置和HTTP链路与发送和接收线程的关系配置。
这里,HTTP的应用模式同样有三种,一种为非持久连接,另外一种是带流水线的持久连接,第三种是不带流水线的持久连接。
另外,配置的HTTP链路与发送和接收线程的关系如图6所示,如图6所示,假设所述HTTP应用配置管理500个HTTP链路,发送线程池总共包括5个发送线程,每个发送线程管理100个HTTP链路的消息发送,假设发送线程的序号为i,它管理的HTTP链路的序号i、i+5、i+2×5、...、i+99×5,其中i的取值范围为0~4;
接收线程池总共包括10个接收线程,每个接收线程管理50个HTTP链路的消息发送,假设接收线程的序号为j,它管理的HTTP链路的序号j、j+10、j+2×10、...、i+49×10,其中,j的取值范围为0~9。
步骤502、HTTP应用触发链接TCP链路,并启动HTTP应用的发送计数器和接收计数器。
步骤503、HTTP应用的序号为500的HTTP链路接收到上层应用消息后,根据消息格式判断接收到的是否是请求消息,若是请求消息,说明此时本地通信端为客户端,则将所接收到的请求消息发送到与所述HTTP链路的序号500对应的5号发送线程的消息队列中后执行步骤504a~步骤510′a,或步骤504a~步骤510″a;若是应答消息,说明此时本地通信端为服务器端,则参见图5B,将所接收到的应答消息发送到与所述HTTP链路的序号500对应的5号发送线程的消息队列中后执行步骤504b~步骤510′b,或步骤504b~步骤510″b。
这里,因为HTTP链路的序号为500,根据步骤51中的HTTP链路与发送和接收线程的关系配置规则,可知:500=5+99×5,所以与所述HTTP链路的序号500对应的发送线程编号为5。
步骤504a、5号发送线程将所述请求消息插入与所述HTTP链路的序号 500对应的发送消息缓冲区。
步骤505a、5号发送线程根据所述HTTP链路的配置属性确定HTTP的模式,如果是非持久连接的HTTP,则执行步骤506′a;如果是带流水线的持久连接的HTTP,则执行步骤506″a;如果是不带流水线的持久连接的HTTP,则执行步骤506″′a。
步骤506′a、如果是非持久连接的HTTP,5号发送线程直接发送缓冲区的所述请求消息给与所述HTTP链路的序号500对应的Socket,之后执行步骤507a。
步骤506″a、如果是带流水线的持久连接的HTTP,5号发送线程直接发送缓冲区的所述请求消息给与所述HTTP链路的序号500对应的Socket,之后执行步骤507a。
步骤506″′a、如果是不带流水线的持久连接的HTTP,5号发送线程判断HTTP的发送计数器的值是否等于接收计数器的值,若是,发送缓冲区的所述请求消息给与所述HTTP链路的序号500对应的Socket,并把所述发送计数器的值加1,之后执行步骤507a;否则,将所述请求消息放在所述HTTP链路的发送缓冲区不处理,等待上一个请求的应答才触发发送。
步骤507a、所述Socket将所述请求消息发给与自身对应的Socket即服务器端Socket,后续步骤由服务器端执行;在服务器端,与所述HTTP链路的序号500对应的10号接收线程调用select或poll从与所述Socket对应的Socket获得所述请求消息。
这里,因为500=10+49×10,所以10号接收线程接收所述请求消息。
步骤508a、10号接收线程将所述请求消息插入与所述HTTP链路的序号500对应的接收消息缓冲区。
步骤509a、10号接收线程根据所述HTTP链路的配置属性确定HTTP的模式,若是非持久连接的HTTP,则执行步骤510′a;若是带流水线的持久连接的HTTP,则执行步骤510″a;若是不带流水线的持久连接的HTTP,则执行步骤510″′a;
步骤510′a、10号接收线程把所述接收消息缓冲区的所述请求消息发给HTTP应用处理,之后执行步骤502。
步骤510″a、10号接收线程把所述接收消息缓冲区的所述请求消息发给HTTP应用处理,然后执行步骤503。
步骤510″′a、10号接收线程判断HTTP发送计数器的值是否等于接收计数器的值,若等于,把所述接收消息缓冲区的所述请求消息发给HTTP应用处理,之后把所述接收计数器的值加1,然后执行步骤503;否则关闭所述HTTP链路。
步骤504b、5号发送线程将所述应答消息插入与所述HTTP链路的序号500对应的发送消息缓冲区。
步骤505b、5号发送线程根据所述HTTP链路的配置属性确定HTTP的模式,如果是非持久连接的HTTP,则执行步骤506′b;如果是带流水线的持久连接的HTTP,则执行步骤506″b;如果是不带流水线的持久连接的HTTP,则执行步骤506″′b。
步骤506′b、如果是非持久连接的HTTP,5号发送线程直接发送缓冲区的所述应答消息给与所述HTTP链路的序号500对应的Socket,之后关闭所述HTTP链路和TCP链路,然后执行步骤507b。
步骤506″b、如果是带流水线的持久连接的HTTP,5号发送线程直接发送缓冲区的所述应答消息给与所述HTTP链路的序号500对应的Socket,之后执行步骤507b。
步骤506″′b、如果是不带流水线的持久连接的HTTP,5号发送线程判断HTTP的发送计数器加1后的值是否等于接收计数器的值,若是,发送缓冲区的所述应答消息给与所述HTTP链路的序号500对应的Socket,并把所述发送计数器的值加1,之后执行步骤507b;否则,关闭所述HTTP链路。
步骤507b、所述Socket将所述应答消息发给与自身对应的Socket即客户端的Socket;在客户端,与所述HTTP链路的序号500对应的10号接收线程调用select或poll从与所述Socket对应的Socket获得所述应答消息。
这里,因为500=10+49×10,所以10号接收线程接收所述应答消息。
步骤508b、10号接收线程将所述应答消息插入与所述HTTP链路的序号500对应的接收消息缓冲区。
步骤509b、10号接收线程根据所述HTTP链路的配置属性确定HTTP的模式,若是非持久连接的HTTP,则执行步骤510′b;若是带流水线的持久连接的HTTP,则执行步骤510″b;若是不带流水线的持久连接的HTTP,则执行步骤510″′b。
步骤510′b、10号接收线程把所述接收消息缓冲区的所述应答消息发给HTTP应用处理,关闭所述HTTP链路及TCP链路后执行步骤502;
步骤510″b、10号接收线程把所述接收消息缓冲区的所述应答消息发给HTTP应用处理,然后执行步骤503。
步骤510″′b、10号接收线程判断HTTP发送计数器的值是否等于接收计数器加1后的值,若等于,把所述接收消息缓冲区的所述应答消息发给HTTP应用处理,之后把所述接收计数器的值加1,然后执行步骤503;否则关闭所述HTTP链路。
综上,本发明在HTTP应用中引入了发送计数器和接收计数器,通过对发送计数器和接收计数器的值进行比较,使得HTTP应用能够同时应用于非持久连接、带流水线的持久连接和不带流水线的持久连接这三种模式。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (10)
1.一种使用线程池实现超文本传输协议HTTP应用的方法,其特征在于,该方法包括以下步骤:
A、对HTTP应用进行模式配置;
B、HTTP应用触发链接TCP链路和HTTP链路,并启动HTTP应用的发送计数器和接收计数器;
C、所述HTTP链路如果收到HTTP应用提交的要发送的消息,则通过发送线程处理发送该消息,如果收到对端TCP链路的消息,则通过接收线程处理接收该消息;所述发送线程和接收线程在处理过程中具体根据所述HTTP应用的模式和所述消息的消息类型进行区别处理,其中:对于非持久连接模式,在发送完应答消息或接收完应答消息后,关闭对应的HTTP链路和TCP链路;对于带流水线的持久连接模式,则正常发送或接收所述消息;对于不带流水线的持久连接模式,则通过所述发送计数器和接收计数器分别统计发送消息数和接收消息数,并根据比较所述发送计数器和接收计数器的统计值控制消息的发送和接收。
2.根据权利要求1所述的方法,其特征在于,所述步骤C中,如果所述消息的种类为请求消息,则所述发送线程对该消息进行处理发送的具体过程包括:确定HTTP应用的模式,如果为非持久连接,则通过套接字Socket将所述请求消息发给通信对端的对应接收线程;如果为带流水线的持久连接,则通过Socket将所述请求消息发给通信对端的对应接收线程;如果为不带流水线的持久连接,则判断HTTP的发送计数器的值是否等于接收计数器的值,若是,通过Socket将所述请求消息发给通信对端的与所述HTTP链路的序号对应的接收线程,之后把所述发送计数器的值加1;否则,不处理所述请求消息,直到上一个请求的应答到达才触发发送。
3.根据权利要求2所述的方法,其特征在于,步骤C中:所述通信对端的接收线程收到请求消息后,确定HTTP应用的模式,如果为非持久连接,把所述请求消息发给HTTP应用处理;如果为带流水线的持久连接,则把所述请求消息发给HTTP应用处理;如果为不带流水线的持久连接,判断HTTP发送计数器的值是否等于接收计数器的值,若等于,把所述请求消息发给HTTP应用处理,之后把所述接收计数器的值加1;否则关闭所述HTTP链路。
4.根据权利要求1所述的方法,其特征在于,所述步骤C中,如果所述消息的种类为应答消息,则所述发送线程对该消息进行处理发送的具体过程包括:确定HTTP应用的模式,如果为非持久连接,则通过Socket将所述应答消息发给通信对端的对应接收线程,之后关闭所述HTTP链路和TCP链路;如果为带流水线的持久连接,则通过Socket将所述应答消息发给通信对端的对应接收线程;如果为不带流水线的持久连接,则判断HTTP的发送计数器加1后的值是否等于接收计数器的值,若是,通过Socket将所述应答消息发送给通信对端的对应接收线程,并把所述发送计数器的值加1;否则,关闭所述HTTP链路和TCP链路。
5.根据权利要求4所述的方法,其特征在于,步骤C中,所述通信对端的接收线程收到应答消息后,确定HTTP应用的模式,如果是非持久连接,把所述应答消息发给HTTP应用处理,然后关闭所述HTTP链路和TCP链路;如果是带流水线的持久连接,则把所述应答消息发给HTTP应用处理;如果是不带流水线的持久连接,则判断HTTP发送计数器的值是否等于接收计数器加1后的值,若等于,把所述应答消息发给HTTP应用处理,之后把所述接收计数器的值加1;否则关闭所述HTTP链路和TCP链路。
6.根据权利要求1所述的方法,其特征在于,在步骤A中进一步配置HTTP链路与发送线程和接收线程的关系,在发送或接收消息时,通过所述HTTP链路对应的发送线程或接收线程进行处理。
7.根据权利要求6所述的方法,其特征在于,配置的HTTP链路与发送线程和接收线程的关系为:发送线程管理的HTTP链路的序号为:第一整数与发送线程总个数的积与发送线程编号的和,所述第一整数的范围为:大于等于0小于等于每个发送线程管理的HTTP链路消息的总个数值减去1得到的差;接收线程管理的HTTP链路的序号为:第二整数与接收线程总个数的积与接收线程编号的和,所述第二整数的范围为:大于等于0小于等于每个接收线程管理的HTTP链路消息的总个数值减去1得到的差。
8.根据权利要求7所述的方法,其特征在于,所述接收线程编号满足以下关系:所述HTTP链路的序号减去接收线程编号的差除以接收线程总个数得到的商为整数,且所得到的整数小于每个接收线程最多可以管理的消息数。
9.根据权利要求8所述的方法,其特征在于,所述发送线程编号满足以下关系:所述HTTP链路的序号减去发送线程编号的差除以发送线程总个数得到的商为整数,且所述整数小于每个发送线程最多可以管理的消息个数。
10.根据权利要求1所述的方法,其特征在于,所述TCP链路通过Socket将收到的消息发送给接收线程,且接收线程调用select或poll函数获得所述消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810129127A CN101621532B (zh) | 2008-06-30 | 2008-06-30 | 一种使用线程池实现超文本传输协议应用的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810129127A CN101621532B (zh) | 2008-06-30 | 2008-06-30 | 一种使用线程池实现超文本传输协议应用的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101621532A CN101621532A (zh) | 2010-01-06 |
CN101621532B true CN101621532B (zh) | 2012-09-05 |
Family
ID=41514573
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810129127A Expired - Fee Related CN101621532B (zh) | 2008-06-30 | 2008-06-30 | 一种使用线程池实现超文本传输协议应用的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101621532B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102202094A (zh) * | 2011-05-13 | 2011-09-28 | 中兴通讯股份有限公司 | 一种基于http的业务请求处理方法及装置 |
CN103532818B (zh) * | 2013-10-24 | 2017-02-15 | 福建师范大学 | 一种vpn链路可达性的快速测试方法 |
CN104283957A (zh) * | 2014-10-13 | 2015-01-14 | 无锡云捷科技有限公司 | 基于持续连接机制的cdn缓存方法 |
CN105260374B (zh) * | 2015-07-17 | 2019-03-15 | 中国科学院计算技术研究所 | 异步流水线式的图查询方法及系统 |
CN110336856B (zh) * | 2019-05-10 | 2021-11-26 | 成都终身成长科技有限公司 | 接口调用方法、装置、电子设备及存储介质 |
CN111800316B (zh) * | 2020-07-16 | 2021-08-13 | 浙江百应科技有限公司 | 一种解决管线式http请求的服务器链路关闭的方法 |
CN114826637A (zh) * | 2021-01-28 | 2022-07-29 | 广州慧睿思通科技股份有限公司 | 密文的发送方法及装置、系统、存储介质、电子设备 |
CN114760231A (zh) * | 2022-04-14 | 2022-07-15 | 和中通信科技有限公司 | 一种快速大规模主机在线识别的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1639703A (zh) * | 2001-10-05 | 2005-07-13 | Bea系统公司 | 用于使爪哇小服务程序与异步消息结合的系统 |
CN1661562A (zh) * | 2004-02-23 | 2005-08-31 | 鸿富锦精密工业(深圳)有限公司 | 多线程发送资料系统及方法 |
WO2007071607A1 (en) * | 2005-12-22 | 2007-06-28 | International Business Machines Corporation | Method and apparatus for collecting data for characterizing http session workloads |
-
2008
- 2008-06-30 CN CN200810129127A patent/CN101621532B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1639703A (zh) * | 2001-10-05 | 2005-07-13 | Bea系统公司 | 用于使爪哇小服务程序与异步消息结合的系统 |
CN1661562A (zh) * | 2004-02-23 | 2005-08-31 | 鸿富锦精密工业(深圳)有限公司 | 多线程发送资料系统及方法 |
WO2007071607A1 (en) * | 2005-12-22 | 2007-06-28 | International Business Machines Corporation | Method and apparatus for collecting data for characterizing http session workloads |
Also Published As
Publication number | Publication date |
---|---|
CN101621532A (zh) | 2010-01-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101621532B (zh) | 一种使用线程池实现超文本传输协议应用的方法 | |
US10715282B2 (en) | Method and related device for improving TCP transmission efficiency using delayed ACK | |
CN105075216B (zh) | 识别原始ip地址以及客户端端口连接 | |
CN102685204B (zh) | 数据资源传输的方法和设备 | |
US11064330B2 (en) | Methods for enabling delay-awareness in the constrained application protocol (CoAP) | |
EP1872534B1 (en) | System and method of message traffic optimization | |
CN108881008A (zh) | 一种数据传输的方法、装置和系统 | |
CN102394880B (zh) | 内容分发网络中的跳转响应处理方法和设备 | |
US10171610B2 (en) | Web caching method and system for content distribution network | |
CN102638582B (zh) | 数据通信方法及通信端 | |
CN108243211A (zh) | 一种数据传输方法及装置 | |
CN101945103A (zh) | Ip网络应用加速系统 | |
CN103312807A (zh) | 数据传输方法、装置及系统 | |
US20110280247A1 (en) | System and method for reducing latency via multiple network connections | |
US20200007653A1 (en) | Multi-path management | |
CN101631127A (zh) | 文件传输方法及客户端 | |
CN102571575A (zh) | 一种session 信息创建方法、装置和系统 | |
CN102315918B (zh) | 一种tcp连接与sctp连接互通的方法及装置 | |
CN102761608B (zh) | Udp会话复用的方法和负载均衡设备 | |
US6965765B2 (en) | Transactional message-queue communication for wirelessly networked devices system and method | |
CN105897452A (zh) | 一种数据重传方法及装置 | |
WO2013152614A1 (zh) | 一种基于应用层数据的网络接入系统和方法 | |
CN103533001B (zh) | 基于http多重代理的通信方法和系统、中间代理服务器 | |
US8332498B2 (en) | Synchronized relay messaging and coordinated network processing using SNMP | |
US8060568B2 (en) | Real time messaging framework hub to intercept and retransmit messages for a messaging facility |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120905 Termination date: 20160630 |
|
CF01 | Termination of patent right due to non-payment of annual fee |