一種多線程高性能http代理實現(xiàn)方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種多線程高性能http代理實現(xiàn)方法及系統(tǒng),本發(fā)明的方案綜合使用了epoll事件通知機制和多線程技術,通過合理的建模和設計,極大的提高了http代理的并發(fā)處理能力,有效地解決了現(xiàn)有http代理實現(xiàn)方案無法有效處理特大并發(fā)請求這一問題。
【專利說明】一種多線程高性能http代理實現(xiàn)方法及系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)信息傳輸領域,尤其涉及一種多線程高性能http代理實現(xiàn)方法及系統(tǒng)
【背景技術】
[0002]近十年來,互聯(lián)網(wǎng)飛速發(fā)展,互聯(lián)網(wǎng)的使用人數(shù)也在急劇膨脹,這就對傳統(tǒng)C/S (客戶機/服務器)模式下的http (超文本傳送協(xié)議)代理服務器提出了很大的挑戰(zhàn),代理服務器需要有足夠大的并發(fā)處理能力才能去滿足日常的用戶需求,隨著互聯(lián)網(wǎng)使用率的不斷增大,這樣的并發(fā)處理能力要求也在不斷的增加,而傳統(tǒng)的http代理服務器在并發(fā)處理能力上則沒有跟上步伐。
[0003]關于如何提升http代理服務器的并發(fā)服務能力,以滿足大并發(fā)情景下用戶的需求,方法有多種,既可以在現(xiàn)有http代理服務器的基礎上優(yōu)化配置,也可以使用最新的技術重新設計http代理的架構(gòu),傳統(tǒng)的http代理實現(xiàn)方案包括apache http代理項目以及haproxy項目等。
[0004]下面將分別介紹apache http代理項目以及haproxy項目這兩種現(xiàn)有的http代理實現(xiàn)方案。
[0005]apache http代理項目是目前互聯(lián)網(wǎng)上最流行的http代理實現(xiàn)方案。
[0006]它提供多進程多線程的代理解決方案,用戶可以通過配置文件的方式來控制代理的運行模式,運行級別,以及其他的信息。其穩(wěn)定的性能能夠為互聯(lián)網(wǎng)上絕大多數(shù)的網(wǎng)站提供良好的對外服務。
[0007]apache http代理項目也存在著不足之處:首先配置文件過于龐大,這是因為apache http代理項目的目標是通用性,就難免要兼顧到各種情形,從這種意義上講,它已經(jīng)不是單純的http代理,再者就是其經(jīng)過公測的并發(fā)處理能力并不能滿足特定情境下的用戶需求,使得使用該項目的網(wǎng)站在特大并發(fā)請求的沖擊下容易出現(xiàn)癱瘓。
[0008]haproxy項目是提供高可用性,負載均衡和基于TCP和HTTP應用的代理。
[0009]haproxy項目的實現(xiàn)技術是事件驅(qū)動,單一進程,同樣具有穩(wěn)定的并發(fā)處理能力,并且易于整合,也易于部署。但是,haproxy項目也存在這不足之處,僅僅采用單進程,單線程技術,并沒有能夠充分的利用系統(tǒng)的資源,這一定程度上限制了其并發(fā)處理能力的進一步提高,使得在特大并發(fā)情境下,采用該項目的網(wǎng)站仍然容易出現(xiàn)癱瘓。
【發(fā)明內(nèi)容】
[0010]本發(fā)明的目的是提供一種多線程高性能http代理實現(xiàn)方法及系統(tǒng),有效地解決了現(xiàn)有http代理實現(xiàn)方案無法有效處理特大并發(fā)請求這一問題。
[0011]本發(fā)明的目的是通過以下技術方案實現(xiàn)的:
[0012]一種多線程高性能http代理實現(xiàn)方法,該方法包括:
[0013]通過指定的地址接收來自客戶端的連接請求,在成功連接后,根據(jù)該連接請求中攜帶的描述符創(chuàng)建客戶端套接字并存儲在哈希表中,且將該客戶端套接字及其EPOLLIN事件注冊到印OlI中;
[0014]當觸發(fā)客戶端的EPOLLIN事件時,通過所述客戶端套接字讀取來自客戶端的http請求,并將該http請求存儲至本地后進行解析,若解析成功,但本地緩存未命中時向服務器發(fā)起連接,在成功連接服務器后,生成一對應的服務器套接字并存儲在哈希表中,且將該服務器套接字及其EP0LL0UT事件注冊到印olI中;
[0015]從哈希表中定位該客戶端套接字,并觸發(fā)服務器的EP0LL0UT事件,通過該客戶端套接字取出存儲在本地的http請求后通過所述服務器套接字轉(zhuǎn)發(fā)給對應的服務器,且將該服務器套接字及其EPOLLIN事件注冊到印oil中;
[0016]當觸發(fā)服務器的EPOLLIN事件時,通過該服務器從哈希表中定位對應的客戶端套接字,從服務器中讀取該客戶端套接字對應客戶端http請求的響應消息并存儲,且將該客戶端套接字及其EP0LL0UT事件注冊到epoll中;
[0017]通過該服務器從哈希表中定位該客戶端套接字,并觸發(fā)EP0LL0UT事件,通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端。
[0018]進一步的,所述通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端之后包括:
[0019]判斷是否與該客戶端繼續(xù)保持連接;
[0020]若是,則將該客戶端套接字重新注冊到epoll中;否則,在哈希表刪除該客戶端的相關信息并關閉連接。
[0021]一種多線程高性能http代理實現(xiàn)系統(tǒng),該系統(tǒng)包括:
[0022]接收連接模塊,用于通過指定的地址接收來自客戶端的連接請求,在成功連接后,根據(jù)該連接請求中攜帶的描述符創(chuàng)建客戶端套接字并存儲在哈希表中,且將該客戶端套接字及其EPOLLIN事件注冊到印olI中;
[0023]讀取請求模塊,用于當觸發(fā)客戶端的EPOLLIN事件時,通過所述客戶端套接字讀取來自客戶端的http請求,并將該http請求存儲至本地后進行解析,若解析成功,但本地緩存未命中時向服務器發(fā)起連接,在成功連接服務器后,生成一對應的服務器套接字并存儲在哈希表中,且將該服務器套接字及其EP0LL0UT事件注冊到epoll中;
[0024]轉(zhuǎn)發(fā)請求模塊,用于從哈希表中定位該客戶端套接字,并觸發(fā)服務器的EP0LL0UT事件,通過該客戶端套接字取出存儲在本地的http請求后通過所述服務器套接字轉(zhuǎn)發(fā)給對應的服務器,且將該服務器套接字及其EPOLLIN事件注冊到epoll中;
[0025]讀取響應模塊,用于當觸發(fā)服務器的EPOLLIN事件時,通過該服務器從哈希表中定位對應的客戶端套接字,從服務器中讀取該客戶端套接字對應客戶端http請求的響應消息并存儲,且將該客戶端套接字及其EP0LL0UT事件注冊到epoll中;
[0026]響應轉(zhuǎn)發(fā)模塊,用于通過該服務器從哈希表中定位該客戶端套接字,并觸發(fā)EP0LL0UT事件,通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端。
[0027]進一步的,所述通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端之后包括:
[0028]判斷是否與該客戶端繼續(xù)保持連接;
[0029]若是,則將該客戶端套接字重新注冊到epoll中;否則,在哈希表刪除該客戶端的相關信息并關閉連接。
[0030]由上述本發(fā)明提供的技術方案可以看出,本發(fā)明所提供的方案綜合使用了 epoll事件通知機制和多線程技術,通過合理的建模和設計,極大的提高了 http代理的并發(fā)處理能力,有效地解決了現(xiàn)有http代理實現(xiàn)方案無法有效處理特大并發(fā)請求這一問題。
【專利附圖】
【附圖說明】
[0031]為了更清楚地說明本發(fā)明實施例的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域的普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他附圖。
[0032]圖1為本發(fā)明實施例一提供的一種多線程高性能http代理實現(xiàn)方法的流程圖;
[0033]圖2為本發(fā)明實施例一提供的接收連接模塊流程圖;
[0034]圖3為本發(fā)明實施例一提供的讀取請求模塊流程圖;
[0035]圖4為本發(fā)明實施例一提供的轉(zhuǎn)發(fā)請求模塊流程圖;
[0036]圖5為本發(fā)明實施例一提供的讀取響應模塊流程圖;
[0037]圖6為本發(fā)明實施例一提供的轉(zhuǎn)發(fā)響應模塊流程圖;
[0038]圖7為本發(fā)明實施例二提供的一種多線程高性能http代理實現(xiàn)系統(tǒng)的示意圖。
【具體實施方式】
[0039]下面結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明的保護范圍。
[0040]實施例一
[0041]圖1為本發(fā)明實施例一提供的一種多線程高性能http代理實現(xiàn)方法的流程圖。如圖1所示,該方法主要包括如下步驟:
[0042]步驟11、通過指定的地址接收來自客戶端的連接請求,在成功連接后,根據(jù)該連接請求中攜帶的描述符創(chuàng)建客戶端套接字并存儲在哈希表中,且將該客戶端套接字及其EPOLLIN事件注冊到印olI中。
[0043]步驟12、當觸發(fā)客戶端的EPOLLIN事件時,通過所述客戶端套接字讀取來自客戶端的http請求,并將該http請求存儲至本地后進行解析,若解析成功,但本地緩存未命中時向服務器發(fā)起連接,在成功連接服務器后,生成一對應的服務器套接字并存儲在哈希表中,且將該服務器套接字及其EP0LL0UT事件注冊到印olI中。
[0044]步驟13、從哈希表中定位該客戶端套接字,并觸發(fā)服務器的EP0LL0UT事件,通過該客戶端套接字取出存儲在本地的http請求后通過所述服務器套接字轉(zhuǎn)發(fā)給對應的服務器,且將該服務器套接字及其EPOLLIN事件注冊到印oil中。
[0045]步驟14、當觸發(fā)服務器的EPOLLIN事件時,通過該服務器從哈希表中定位對應的客戶端套接字,從服務器中讀取該客戶端套接字對應客戶端http請求的響應消息并存儲,且將該客戶端套接字及其EPOLLOUT事件注冊到epoll中。
[0046]步驟15、通過該服務器從哈希表中定位該客戶端套接字,并觸發(fā)EPOLLOUT事件,通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端。
[0047]其中,所述通過該服務器套接字取出響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端之后包括:判斷是否與該客戶端繼續(xù)保持連接;若是,則將該客戶端套接字重新注冊到epoll中;否則,在哈希表刪除該客戶端的相關信息并關閉連接。
[0048]本發(fā)明實施例中,套接字及其事件的管理使用了如下的印oil機制:(I)初始化階段完成epoll機制的準備工作,完成epoll的初始化;(2)在注冊套接字及其事件的時候聲明使用EP0LL0NESH0T屬性;(3)在修改套接字事件的時候使用MOD操作。
[0049]同時,本發(fā)明實施例中大并發(fā)連接的處理使用了如下的多線程機制:上述5個步驟都有對應的線程進行實施;且使用互斥鎖和條件變量來進行線程同步。
[0050]另外,本發(fā)明實施例中對于線程的管理使用了如下的線程池方法:(1)全部線程的整體狀態(tài)通過線程池中的變量群來標識,并且變量群的維護在每一個線程中自主完成;
(2)線程池中的線程數(shù)量由專門的動態(tài)管理算法來決定。(3)動態(tài)管理算法的運行有專門的動態(tài)管理線程維護。
[0051]為了便于理解,下面結(jié)合附圖2-6對上述5個步驟做詳細的說明。
[0052]步驟11為接收連接的過程,其工作流程如圖2所示。首先,創(chuàng)建需要的對象,進行相應的初始化,然后在一個無限循環(huán)中,不斷的接收來自客戶端的連接請求,如果失敗,則記錄在日志文件中,對于接受成功的連接,將相關的信息(套接字及其描述符)存儲在哈希表中,并且將該套接字及EPOLLIN事件注冊到印olI當中。
[0053]當成功接收連接后操作系統(tǒng)會為這條連接分配一個新的描述符來創(chuàng)建一新的套接字,用于雙方的通信,且每個客戶端的套接字都不一樣,服務器則是通過套接字和客戶端通信的,客戶端和套接字是一一對應的。
[0054]本發(fā)明實施例中引入了 epoll事件,epoll事件包括EPOLLIN事件與EPOLLOUT事件。其中,EPOLLIN事件指的是當中套接字有數(shù)據(jù)進來,印oil機制就會觸發(fā)EPOLLIN事件,然后由服務器讀取數(shù)據(jù);EP0LL0UT事件則是指若該套接字有數(shù)據(jù)要發(fā)送,則印oil機制觸發(fā)EPOLLOUT事件,然后由服務器通過套接字把數(shù)據(jù)發(fā)送出去。
[0055]本步驟中將EPOLLIN事件注冊到epoll當中是為了采用epoll的事件通知機制,即用戶無需一直等待客戶端發(fā)送請求,而是可以去處理其他事務,比如說處理其它客戶端套接字中的數(shù)據(jù);當客戶端通過該套接字發(fā)送請求時epoll機制則會通知用戶。
[0056]步驟12為讀取http請求的過程,其工作流程如圖3所示。首先,通過客戶端套接字讀取客戶端的http請求(即此處已經(jīng)觸發(fā)步驟11中注冊的EPOLLIN事件),對于暫時不可讀的套接字,則再次注冊到epoll當中,稍后再讀;對于可以讀取的,則將讀取到的http請求存儲到本地,并且解析該請求,解析失敗則返回錯誤給客戶端,解析成功則在本地緩存未命中的情況下向服務器發(fā)起連接,并且將成功的服務器套接字與EPOLLOUT事件注冊到epoll當中。
[0057]本發(fā)明實施例所述的本地緩存未命中表示本地沒有對應于該http的響應。具體來說,任何一個http代理都會有緩存的功能,也就是說本地的http代理會緩存一部分后臺服務器發(fā)來的響應,當下次有新的http請求到來的時候,首先在本地查找,看看有沒有對應的響應,如果有的話就直接把響應發(fā)給客戶端了,這樣可以分擔一部分后臺服務器的壓力;但是如果本地的http代理沒有對應的響應,則應該轉(zhuǎn)發(fā)給服務器,此時有一個專有名詞,稱為緩存未命中。
[0058]步驟13為轉(zhuǎn)發(fā)請求的過程,其工作流程如圖4所示。首先,從哈希表中定位客戶端套接字(即此處已經(jīng)觸發(fā)步驟12中注冊的EPOLLOUT事件),如果定位失敗,則進行錯誤處理;如果定位成功,則從本地取出與該客戶端套接字相對應的http請求通過所述服務器套接字轉(zhuǎn)發(fā)給對應的服務器,并且將服務器套接字及EPOLLIN事件注冊到epoll當中。
[0059]步驟14為讀取響應的過程,其工作流程如圖5所示。首先,通過服務器定位到哈希表中的對應客戶端套接字(即此處已經(jīng)觸發(fā)步驟13中注冊的EPOLLIN事件),如果定位失敗,進行錯誤處理;如果定位成功,則從服務器中讀取該客戶端套接字對應的http請求的響應消息并存儲在本地,且將該客戶端套接字及EPOLLOUT事件注冊到epoll中。
[0060]步驟15為轉(zhuǎn)發(fā)響應的過程,其工作流程如圖6所示。首先,通過該服務器從哈希表中再次定位該客戶端套接字,(即此處已經(jīng)觸發(fā)步驟14中注冊的EPOLLOUT事件),定位失敗,則進行錯誤處理;如果定位成功,則通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端,再判斷是否保持連接,如果保持,則重新注冊到epoll當中,如果不保持,則刪除哈希節(jié)點,并且關閉連接。
[0061]本發(fā)明實施例的方案綜合使用了 epoll事件通知機制和多線程技術,通過合理的建模和設計,極大的提高了 http代理的并發(fā)處理能力,有效地解決了現(xiàn)有http代理實現(xiàn)方案無法有效處理特大并發(fā)請求這一問題。
[0062]實施例二
[0063]本發(fā)明實施例二提供一種多線程高性能http代理實現(xiàn)系統(tǒng),該系統(tǒng)可以部署在連接于客戶端與服務器池之間的代理服務器中。如圖7所示,該系統(tǒng)主要包括:
[0064]接收連接模塊71,用于通過指定的地址接收來自客戶端的連接請求,在成功連接后,根據(jù)該連接請求中攜帶的描述符創(chuàng)建客戶端套接字并存儲在哈希表中,且將該客戶端套接字及其EPOLLIN事件注冊到印oil中;
[0065]讀取請求模塊72,用于當觸發(fā)客戶端的EPOLLIN事件時,通過所述客戶端套接字讀取來自客戶端的http請求,并將該http請求存儲至本地后進行解析,若解析成功,但本地緩存未命中時向服務器發(fā)起連接,在成功連接服務器后,生成一對應的服務器套接字并存儲在哈希表中,且將該服務器套接字及其EPOLLOUT事件注冊到epoll中;
[0066]轉(zhuǎn)發(fā)請求模塊73,用于從哈希表中定位該客戶端套接字,并觸發(fā)服務器的EPOLLOUT事件,通過該客戶端套接字取出存儲在本地的http請求后通過所述服務器套接字轉(zhuǎn)發(fā)給對應的服務器,且將該服務器套接字及其EPOLLIN事件注冊到epoll中;
[0067]讀取響應模塊74,用于當觸發(fā)服務器的EPOLLIN事件時,通過該服務器從哈希表中定位對應的客戶端套接字,從服務器中讀取該客戶端套接字對應客戶端http請求的響應消息并存儲,且將該客戶端套接字及其EPOLLOUT事件注冊到epoll中;
[0068]響應轉(zhuǎn)發(fā)模塊75,用于通過該服務器從哈希表中定位該客戶端套接字,并觸發(fā)EPOLLOUT事件,通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端。
[0069]其中,所述通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端之后包括:判斷是否與該客戶端繼續(xù)保持連接;若是,則將該客戶端套接字重新注冊到epoll中;否則,在哈希表刪除該客戶端的相關信息并關閉連接。
[0070]本發(fā)明實施例所提供的系統(tǒng)可以部署在連接于客戶端與服務器池之間的代理服務器中。
[0071 ] 需要說明的是,上述系統(tǒng)中包含的各個功能模塊所實現(xiàn)的功能的具體實現(xiàn)方式在前面的各個實施例中已經(jīng)有詳細描述,故在這里不再贅述。
[0072]所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將系統(tǒng)的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功倉泛。
[0073]通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到上述實施例可以通過軟件實現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來實現(xiàn)。基于這樣的理解,上述實施例的技術方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是⑶-R0M,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
[0074]以上所述,僅為本發(fā)明較佳的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何熟悉本【技術領域】的技術人員在本發(fā)明披露的技術范圍內(nèi),可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應該以權利要求書的保護范圍為準。
【權利要求】
1.一種多線程高性能http代理實現(xiàn)方法,其特征在于,該方法包括: 通過指定的地址接收來自客戶端的連接請求,在成功連接后,根據(jù)該連接請求中攜帶的描述符創(chuàng)建客戶端套接字并存儲在哈希表中,且將該客戶端套接字及其EPOLLIN事件注冊到epoll中; 當觸發(fā)客戶端的EPOLLIN事件時,通過所述客戶端套接字讀取來自客戶端的http請求,并將該http請求存儲至本地后進行解析,若解析成功,但本地緩存未命中時向服務器發(fā)起連接,在成功連接服務器后,生成一對應的服務器套接字并存儲在哈希表中,且將該服務器套接字及其EP0LL0UT事件注冊到印olI中; 從哈希表中定位該客戶端套接字,并觸發(fā)服務器的EP0LL0UT事件,通過該客戶端套接字取出存儲在本地的http請求后通過所述服務器套接字轉(zhuǎn)發(fā)給對應的服務器,且將該服務器套接字及其EPOLLIN事件注冊到印oil中; 當觸發(fā)服務器的EPOLLIN事件時,通過該服務器從哈希表中定位對應的客戶端套接字,從服務器中讀取該客戶端套接字對應客戶端http請求的響應消息并存儲,且將該客戶端套接字及其EP0LL0UT事件注冊到印olI中; 通過該服務器從哈希表中定位該客戶端套接字,并觸發(fā)EP0LL0UT事件,通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端。
2.根據(jù)權利要求1所述的方法,其特征在于,所述通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端之后包括: 判斷是否與該客戶端繼續(xù)保持連接; 若是,則將該客戶端套接字重新注冊到epoll中;否則,在哈希表刪除該客戶端的相關信息并關閉連接。
3.一種多線程高性能http代理實現(xiàn)系統(tǒng),其特征在于,該系統(tǒng)包括: 接收連接模塊,用于通過指定的地址接收來自客戶端的連接請求,在成功連接后,根據(jù)該連接請求中攜帶的描述符創(chuàng)建客戶端套接字并存儲在哈希表中,且將該客戶端套接字及其EPOLLIN事件注冊到印olI中; 讀取請求模塊,用于當觸發(fā)客戶端的EPOLLIN事件時,通過所述客戶端套接字讀取來自客戶端的http請求,并將該http請求存儲至本地后進行解析,若解析成功,但本地緩存未命中時向服務器發(fā)起連接,在成功連接服務器后,生成一對應的服務器套接字并存儲在哈希表中,且將該服務器套接字及其EP0LL0UT事件注冊到epoll中; 轉(zhuǎn)發(fā)請求模塊,用于從哈希表中定位該客戶端套接字,并觸發(fā)服務器的EP0LL0UT事件,通過該客戶端套接字取出存儲在本地的http請求后通過所述服務器套接字轉(zhuǎn)發(fā)給對應的服務器,且將該服務器套接字及其EPOLLIN事件注冊到epoll中; 讀取響應模塊,用于當觸發(fā)服務器的EPOLLIN事件時,通過該服務器從哈希表中定位對應的客戶端套接字,從服務器中讀取該客戶端套接字對應客戶端http請求的響應消息并存儲,且將該客戶端套接字及其EP0LL0UT事件注冊到epoll中; 響應轉(zhuǎn)發(fā)模塊,用于通過該服務器從哈希表中定位該客戶端套接字,并觸發(fā)EP0LL0UT事件,通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端。
4.根據(jù)權利要求3所述的系統(tǒng),其特征在于,所述通過該客戶端套接字取出存儲在本地的響應消息后通過所述客戶端套接字發(fā)送至對應的客戶端之后包括: 判斷是否與該客戶端繼續(xù)保持連接; 若是,則將該客戶端套接字重新注冊到epoll中;否則,在哈希表刪除該客戶端的相關信息并關閉連接。
【文檔編號】H04L29/06GK104320404SQ201410619737
【公開日】2015年1月28日 申請日期:2014年11月5日 優(yōu)先權日:2014年11月5日
【發(fā)明者】陸世亮, 朱明
申請人:中國科學技術大學