本发明专利技术公开了一种多线程高性能http代理实现方法及系统,本发明专利技术的方案综合使用了epoll事件通知机制和多线程技术,通过合理的建模和设计,极大的提高了http代理的并发处理能力,有效地解决了现有http代理实现方案无法有效处理特大并发请求这一问题。
【技术实现步骤摘要】
一种多线程高性能http代理实现方法及系统
本专利技术涉及互联网信息传输领域,尤其涉及一种多线程高性能http代理实现方法及系统
技术介绍
近十年来,互联网飞速发展,互联网的使用人数也在急剧膨胀,这就对传统C/S (客户机/服务器)模式下的http (超文本传送协议)代理服务器提出了很大的挑战,代理服务器需要有足够大的并发处理能力才能去满足日常的用户需求,随着互联网使用率的不断增大,这样的并发处理能力要求也在不断的增加,而传统的http代理服务器在并发处理能力上则没有跟上步伐。 关于如何提升http代理服务器的并发服务能力,以满足大并发情景下用户的需求,方法有多种,既可以在现有http代理服务器的基础上优化配置,也可以使用最新的技术重新设计http代理的架构,传统的http代理实现方案包括apache http代理项目以及haproxy项目等。 下面将分别介绍apache http代理项目以及haproxy项目这两种现有的http代理实现方案。 apache http代理项目是目前互联网上最流行的http代理实现方案。 它提供多进程多线程的代理解决方案,用户可以通过配置文件的方式来控制代理的运行模式,运行级别,以及其他的信息。其稳定的性能能够为互联网上绝大多数的网站提供良好的对外服务。 apache http代理项目也存在着不足之处:首先配置文件过于庞大,这是因为apache http代理项目的目标是通用性,就难免要兼顾到各种情形,从这种意义上讲,它已经不是单纯的http代理,再者就是其经过公测的并发处理能力并不能满足特定情境下的用户需求,使得使用该项目的网站在特大并发请求的冲击下容易出现瘫痪。 haproxy项目是提供高可用性,负载均衡和基于TCP和HTTP应用的代理。 haproxy项目的实现技术是事件驱动,单一进程,同样具有稳定的并发处理能力,并且易于整合,也易于部署。但是,haproxy项目也存在这不足之处,仅仅采用单进程,单线程技术,并没有能够充分的利用系统的资源,这一定程度上限制了其并发处理能力的进一步提高,使得在特大并发情境下,采用该项目的网站仍然容易出现瘫痪。
技术实现思路
本专利技术的目的是提供一种多线程高性能http代理实现方法及系统,有效地解决了现有http代理实现方案无法有效处理特大并发请求这一问题。 本专利技术的目的是通过以下技术方案实现的: 一种多线程高性能http代理实现方法,该方法包括: 通过指定的地址接收来自客户端的连接请求,在成功连接后,根据该连接请求中携带的描述符创建客户端套接字并存储在哈希表中,且将该客户端套接字及其EPOLLIN事件注册到印OlI中; 当触发客户端的EPOLLIN事件时,通过所述客户端套接字读取来自客户端的http请求,并将该http请求存储至本地后进行解析,若解析成功,但本地缓存未命中时向服务器发起连接,在成功连接服务器后,生成一对应的服务器套接字并存储在哈希表中,且将该服务器套接字及其EP0LL0UT事件注册到印olI中; 从哈希表中定位该客户端套接字,并触发服务器的EP0LL0UT事件,通过该客户端套接字取出存储在本地的http请求后通过所述服务器套接字转发给对应的服务器,且将该服务器套接字及其EPOLLIN事件注册到印oil中; 当触发服务器的EPOLLIN事件时,通过该服务器从哈希表中定位对应的客户端套接字,从服务器中读取该客户端套接字对应客户端http请求的响应消息并存储,且将该客户端套接字及其EP0LL0UT事件注册到epoll中; 通过该服务器从哈希表中定位该客户端套接字,并触发EP0LL0UT事件,通过该客户端套接字取出存储在本地的响应消息后通过所述客户端套接字发送至对应的客户端。 进一步的,所述通过该客户端套接字取出存储在本地的响应消息后通过所述客户端套接字发送至对应的客户端之后包括: 判断是否与该客户端继续保持连接; 若是,则将该客户端套接字重新注册到epoll中;否则,在哈希表删除该客户端的相关信息并关闭连接。 一种多线程高性能http代理实现系统,该系统包括: 接收连接模块,用于通过指定的地址接收来自客户端的连接请求,在成功连接后,根据该连接请求中携带的描述符创建客户端套接字并存储在哈希表中,且将该客户端套接字及其EPOLLIN事件注册到印olI中; 读取请求模块,用于当触发客户端的EPOLLIN事件时,通过所述客户端套接字读取来自客户端的http请求,并将该http请求存储至本地后进行解析,若解析成功,但本地缓存未命中时向服务器发起连接,在成功连接服务器后,生成一对应的服务器套接字并存储在哈希表中,且将该服务器套接字及其EP0LL0UT事件注册到epoll中; 转发请求模块,用于从哈希表中定位该客户端套接字,并触发服务器的EP0LL0UT事件,通过该客户端套接字取出存储在本地的http请求后通过所述服务器套接字转发给对应的服务器,且将该服务器套接字及其EPOLLIN事件注册到epoll中; 读取响应模块,用于当触发服务器的EPOLLIN事件时,通过该服务器从哈希表中定位对应的客户端套接字,从服务器中读取该客户端套接字对应客户端http请求的响应消息并存储,且将该客户端套接字及其EP0LL0UT事件注册到epoll中; 响应转发模块,用于通过该服务器从哈希表中定位该客户端套接字,并触发EP0LL0UT事件,通过该客户端套接字取出存储在本地的响应消息后通过所述客户端套接字发送至对应的客户端。 进一步的,所述通过该客户端套接字取出存储在本地的响应消息后通过所述客户端套接字发送至对应的客户端之后包括: 判断是否与该客户端继续保持连接; 若是,则将该客户端套接字重新注册到epoll中;否则,在哈希表删除该客户端的相关信息并关闭连接。 由上述本专利技术提供的技术方案可以看出,本专利技术所提供的方案综合使用了 epoll事件通知机制和多线程技术,通过合理的建模和设计,极大的提高了 http代理的并发处理能力,有效地解决了现有http代理实现方案无法有效处理特大并发请求这一问题。 【附图说明】 为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。 图1为本专利技术实施例一提供的一种多线程高性能http代理实现方法的流程图; 图2为本专利技术实施例一提供的接收连接模块流程图; 图3为本专利技术实施例一提供的读取请求模块流程图; 图4为本专利技术实施例一提供的转发请求模块流程图; 图5为本专利技术实施例一提供的读取响应模块流程图; 图6为本专利技术实施例一提供的转发响应模块流程图; 图7为本专利技术实施例二提供的一种多线程高性能http代理实现系统的示意图。 【具体实施方式】 下面结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获本文档来自技高网...
【技术保护点】
一种多线程高性能http代理实现方法,其特征在于,该方法包括:通过指定的地址接收来自客户端的连接请求,在成功连接后,根据该连接请求中携带的描述符创建客户端套接字并存储在哈希表中,且将该客户端套接字及其EPOLLIN事件注册到epoll中;当触发客户端的EPOLLIN事件时,通过所述客户端套接字读取来自客户端的http请求,并将该http请求存储至本地后进行解析,若解析成功,但本地缓存未命中时向服务器发起连接,在成功连接服务器后,生成一对应的服务器套接字并存储在哈希表中,且将该服务器套接字及其EPOLLOUT事件注册到epoll中;从哈希表中定位该客户端套接字,并触发服务器的EPOLLOUT事件,通过该客户端套接字取出存储在本地的http请求后通过所述服务器套接字转发给对应的服务器,且将该服务器套接字及其EPOLLIN事件注册到epoll中;当触发服务器的EPOLLIN事件时,通过该服务器从哈希表中定位对应的客户端套接字,从服务器中读取该客户端套接字对应客户端http请求的响应消息并存储,且将该客户端套接字及其EPOLLOUT事件注册到epoll中;通过该服务器从哈希表中定位该客户端套接字,并触发EPOLLOUT事件,通过该客户端套接字取出存储在本地的响应消息后通过所述客户端套接字发送至对应的客户端。...
【技术特征摘要】
1.一种多线程高性能http代理实现方法,其特征在于,该方法包括: 通过指定的地址接收来自客户端的连接请求,在成功连接后,根据该连接请求中携带的描述符创建客户端套接字并存储在哈希表中,且将该客户端套接字及其EPOLLIN事件注册到epoll中; 当触发客户端的EPOLLIN事件时,通过所述客户端套接字读取来自客户端的http请求,并将该http请求存储至本地后进行解析,若解析成功,但本地缓存未命中时向服务器发起连接,在成功连接服务器后,生成一对应的服务器套接字并存储在哈希表中,且将该服务器套接字及其EP0LL0UT事件注册到印olI中; 从哈希表中定位该客户端套接字,并触发服务器的EP0LL0UT事件,通过该客户端套接字取出存储在本地的http请求后通过所述服务器套接字转发给对应的服务器,且将该服务器套接字及其EPOLLIN事件注册到印oil中; 当触发服务器的EPOLLIN事件时,通过该服务器从哈希表中定位对应的客户端套接字,从服务器中读取该客户端套接字对应客户端http请求的响应消息并存储,且将该客户端套接字及其EP0LL0UT事件注册到印olI中; 通过该服务器从哈希表中定位该客户端套接字,并触发EP0LL0UT事件,通过该客户端套接字取出存储在本地的响应消息后通过所述客户端套接字发送至对应的客户端。2.根据权利要求1所述的方法,其特征在于,所述通过该客户端套接字取出存储在本地的响应消息后通过所述客户端套接字发送至对应的客户端之后包括: 判断是否与该客户端继续保持连接; 若是,则将该客户端套接字重新注册到epoll中;否则,在哈希表删除该客户端的相关信息并关闭连接。3.一种多线程高性能http代理实现系统,其特...
【专利技术属性】
技术研发人员:陆世亮,朱明,
申请(专利权)人:中国科学技术大学,
类型:发明
国别省市:安徽;34
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。