專利名稱:一種使用線程池實(shí)現(xiàn)超文本傳輸協(xié)議應(yīng)用的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及超文本傳輸協(xié)議(HTTP, Hypertext Transfer Protocol)應(yīng)用 技術(shù),尤其是指一種使用線程池實(shí)現(xiàn)HTTP應(yīng)用的方法。
背景技術(shù):
HTTP是應(yīng)用層協(xié)議,由于其簡捷、快速的應(yīng)用方式,適用于分布式和 合作式超媒體信息系統(tǒng)。自1990年起,HTTP就已經(jīng)被應(yīng)用于WWW全球 信息服務(wù)系統(tǒng)。HTTP允許使用自由答復(fù)的方法表明請(qǐng)求目的,它建立在統(tǒng) 一資源識(shí)別器(URI)提供的參考原則下,作為一個(gè)地址(URL)或名字 (URN),用以標(biāo)志采用哪種方法,它用類似于網(wǎng)絡(luò)郵件和多用途網(wǎng)際郵件 擴(kuò)充協(xié)議(MIME)的格式傳遞消息。HTTP也可用作普通協(xié)議,實(shí)現(xiàn)用戶 代理與連接其它Internet服務(wù),如SMTP、 NNTP、 FTP、 GOPHER及WAIS 等的代理服務(wù)器或網(wǎng)關(guān)之間的通信,允許基本的超媒體訪問各種應(yīng)用提供的 資源,同時(shí)簡化了用戶代理系統(tǒng)的實(shí)施。HTTP是一種請(qǐng)求/響應(yīng)式的協(xié)議。 一個(gè)客戶端與服務(wù)器建立連接后,發(fā)送一個(gè)請(qǐng)求給服務(wù)器,請(qǐng)求的格式是 統(tǒng)一資源標(biāo)識(shí)符(URI)、協(xié)議版本號(hào),后面是類似MIME的信息,包括請(qǐng) 求修飾符、客戶端信息和可能的內(nèi)容。服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng) 信息,其格式是 一個(gè)狀態(tài)行包括信息的協(xié)議版本號(hào)、 一個(gè)成功或錯(cuò)誤的代 碼,后面也是類似MIME的信息,包括服務(wù)器信息、實(shí)體信息和可能的內(nèi) 容??傊?,請(qǐng)求消息和應(yīng)答消息的格式是不相同的。
HTTP的第一版本HTTP/0.9是一種簡單的用于網(wǎng)絡(luò)間原始數(shù)據(jù)傳輸?shù)?協(xié)議,而由RFC 1945定義的HTTP/1.0是在原HTTP/0.9的基礎(chǔ)上,有了 進(jìn)一步的改進(jìn),允許消息以類MIME信息才各式存在,包括請(qǐng)求/響應(yīng)范式中.8
的已傳輸數(shù)據(jù)和修飾符等方面的信息。但是,HTTP/1.0沒有充分考慮到分 層代理服務(wù)器、高速緩沖存儲(chǔ)器、持久連接需求或虛擬主機(jī)等方面的效能。 相比之下,HTTP/1,1要求更加嚴(yán)格以確保服務(wù)的可靠性。其具體其規(guī)范詳 見[RFC 1945]和[RFC 2616〗。
HTTP/1.0和HTTP/1.1都才巴傳豐lT控制十辦i義(TCP, Transmission Control Protocol)作為底層的傳輸協(xié)議。HTTP客戶端首先發(fā)起建立與服務(wù)器之間的 TCP鏈路。 一旦建立連接,瀏覽器進(jìn)程和服務(wù)器進(jìn)程就可以通過各自的套接 字(Socket)來訪問TCP。客戶端往自己的Socket發(fā)送HTTP請(qǐng)求消息,也 從自己的Socket接收HTTP響應(yīng)消息。類似地,服務(wù)器從自己的Socket接 收HTTP請(qǐng)求消息,也往自己的Socket發(fā)送HTTP響應(yīng)消息??蛻舳嘶蚍?務(wù)器一旦把某個(gè)消息送入各自的Socket,這個(gè)消息就完全落入TCP的控制 之中。TCP給HTTP提供一個(gè)可靠的數(shù)據(jù)傳輸服務(wù),這意味著由客戶端發(fā)出 的每個(gè)HTTP請(qǐng)求消息最終將無損地到達(dá)服務(wù)器,由服務(wù)器發(fā)出的每個(gè) HTTP響應(yīng)消息最終也將無損地到達(dá)客戶端。可從中看到分層網(wǎng)絡(luò)體系結(jié)構(gòu) 的一個(gè)明顯優(yōu)勢(shì)HTTP不必?fù)?dān)心數(shù)據(jù)會(huì)丟失,也無需關(guān)心TCP如何從數(shù)據(jù) 的丟失和錯(cuò)序中恢復(fù)出來的細(xì)節(jié),這些是TCP和協(xié)議棧中更低協(xié)議層的任 務(wù)。
TCP還使用一個(gè)擁塞控制機(jī)制,該機(jī)制迫使每個(gè)新的TCP鏈路一開始 以相對(duì)緩慢的速率傳輸數(shù)據(jù),然而只要網(wǎng)絡(luò)不擁塞,每個(gè)連接可以迅速上升 到相對(duì)較高的速率。這個(gè)慢速傳輸?shù)某跏茧A段稱為緩啟動(dòng)。需要注意的是, 在向客戶端發(fā)送所請(qǐng)求文件的同時(shí),服務(wù)器并沒有存儲(chǔ)關(guān)于該客戶端的任何 狀態(tài)信息,即便某個(gè)客戶端在幾秒鐘內(nèi)再次請(qǐng)求同一個(gè)對(duì)象,服務(wù)器也不會(huì) 向客戶端發(fā)這樣的相應(yīng)自己剛剛給它發(fā)送了這個(gè)對(duì)象。相反,服務(wù)器需重 新發(fā)送這個(gè)對(duì)象。因此,HTTP服務(wù)器不維護(hù)客戶端的狀態(tài)信息,是一個(gè)無 狀態(tài)的協(xié)議。
HTTP應(yīng)用的連接模式有三種 一種為非持久連接,另外一種是帶流水 線的持久連接,第三種是不帶流水線的持久連接。HTTP/1.0使用非持久連接,HTTP/1.1默認(rèn)使用持久連接。非持久連接模式如圖1所示,在該模式 下,每次客戶端發(fā)送請(qǐng)求(HTTP REQ )給HTTP服務(wù)器,HTTP服務(wù)器返 回應(yīng)答(HTTP RSP )給HTTP客戶端以后,TCP鏈路就相應(yīng)地被關(guān)閉,下 次傳送發(fā)送消息和應(yīng)答消息的時(shí)候就需要重新建立HTTP客戶端和HTTP服 務(wù)端之間的TCP鏈路,也就是說每個(gè)連接都沒有持續(xù)到可用于傳送其他對(duì) 象,每個(gè)TCP鏈路只用于傳輸一個(gè)請(qǐng)求消息和一個(gè)響應(yīng)消息。非持久連接 有以下缺點(diǎn)首先,客戶端得為每個(gè)待請(qǐng)求的對(duì)象建立并維護(hù)一個(gè)新的連接。 對(duì)于每個(gè)這樣的連接,TCP得在客戶端和服務(wù)器端分配TCP緩沖區(qū),并維 持TCP變量。對(duì)于有可能同時(shí)為來自數(shù)百個(gè)不同客戶端的請(qǐng)求提供服務(wù)的 web服務(wù)器來說,這會(huì)嚴(yán)重增加其負(fù)擔(dān)。其次,每個(gè)對(duì)象都有2個(gè)往返時(shí)間
(RTT, round trip time )的響應(yīng)延長-一個(gè)RTT用于建立TCP鏈路,另
一個(gè)RTT用于請(qǐng)求和接收對(duì)象。最后,每個(gè)對(duì)象都遭受TCP緩啟動(dòng),因?yàn)?每個(gè)TCP鏈路都起始于緩啟動(dòng)階段。其中,RTT是一個(gè)小分組從客戶端主 機(jī)游動(dòng)到服務(wù)器主機(jī)再返回客戶端主機(jī)所花的時(shí)間。RTT包括分組傳播延 遲、在中間路由器和交換機(jī)土的分組排隊(duì)延遲以及分組處理延遲。
在持久連接情況下,服務(wù)器在發(fā)出響應(yīng)后讓TCP鏈路繼續(xù)打開著。同 一對(duì)客戶端/服務(wù)器之間的后續(xù)請(qǐng)求和響應(yīng)可以通過這個(gè)連接發(fā)送。通常, HTTP服務(wù)器在某個(gè)連接閑置一段特定時(shí)間后關(guān)閉它,而這段時(shí)間通常是可 以配置的。持久連接分為不帶流水線的持久連接和帶流水線的持久連接。
不帶流水線的持久連接如圖2所示,客戶端只在收到前一個(gè)請(qǐng)求的響應(yīng) 后才發(fā)出新的請(qǐng)求。這種情況下,web頁面所引用的每個(gè)對(duì)象都經(jīng)歷1個(gè) RTT的延遲,用于請(qǐng)求和接收該對(duì)象。與非持久連接2個(gè)RTT的延遲相比, 不帶流水線的持久連接已有所改善,不過帶流水線的持久連接還能進(jìn)一步降 低響應(yīng)延遲。不帶流水線版本的另一個(gè)缺點(diǎn)是,服務(wù)器送出一個(gè)對(duì)象后開始 等待下一個(gè)請(qǐng)求,而這個(gè)新請(qǐng)求卻不能馬上到達(dá)。這段時(shí)間服務(wù)器資源便閑 置了。
HTTP/1.1的默認(rèn)模式使用帶流水線的持久連接。帶流水線的持久連接模式如圖3所示,HTTP客戶端每碰到一個(gè)引用就立即發(fā)出一個(gè)請(qǐng)求,因而 HTTP客戶端可以一個(gè)接一個(gè)緊挨著發(fā)出各個(gè)引用對(duì)象的請(qǐng)求。服務(wù)器收到 這些請(qǐng)求后,也可以一個(gè)接一個(gè)緊挨著發(fā)出各個(gè)對(duì)象。如果所有的請(qǐng)求和響 應(yīng)都是緊挨著發(fā)送的,那么所有引用到的對(duì)象一共只經(jīng)歷1個(gè)RTT的延遲, 而不是像不帶流水線的版本那樣,每個(gè)引用到的對(duì)象都各有1個(gè)RTT的延 遲。另外,帶流水線的持久連接中服務(wù)器空等請(qǐng)求的時(shí)間比較少。與非持久 連接相比,無論是哪種持久連接,除降低了 1個(gè)RTT的響應(yīng)延遲外,緩啟 動(dòng)延遲也比較小。其原因在于既然各個(gè)對(duì)象使用同一個(gè)TCP鏈路,服務(wù)器 發(fā)出第一個(gè)對(duì)象后就不必再以一開始的緩慢速率發(fā)送后續(xù)對(duì)象。相反,服務(wù) 器可以按照第一個(gè)對(duì)象發(fā)送完畢時(shí)的速率開始發(fā)送下一個(gè)對(duì)象。
但是,現(xiàn)有技術(shù)中,尚沒有能夠同時(shí)適用于這三種HTTP模式的HTTP 應(yīng)用方法。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種使用線程池實(shí)現(xiàn)HTTP應(yīng)用 的方法,利用本發(fā)明,使得HTTP應(yīng)用能夠同時(shí)適用于非持久連接、帶流水 線的持久連接和不帶流水線的持久連接這三種HTTP模式。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的
一種使用線程池實(shí)現(xiàn)超文本傳輸協(xié)議HTTP應(yīng)用的方法,該方法包括以下 步驟
A、 對(duì)HTTP應(yīng)用進(jìn)行才莫式配置;
B、 HTTP應(yīng)用觸發(fā)鏈4妄TCP鏈路和HTTP鏈^各,并啟動(dòng)HTTP應(yīng)用的 發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器;
C、 所述HTTP鏈路如果收到HTTP應(yīng)用提交的要發(fā)送的消息,則通過 發(fā)送線程處理發(fā)送該消息,如果收到對(duì)端TCP鏈路的消息,則通過接收線 程處理接收該消息;所迷發(fā)送線程和接收線程在處理過程中具體根據(jù)所述 HTTP應(yīng)用的模式和所述消息的消息類型進(jìn)行區(qū)別處理,其中對(duì)于非持久連接模式,在發(fā)送完應(yīng)答消息或接收完應(yīng)答消息后,關(guān)鬧對(duì)應(yīng)的HTTP鏈路 和TCP鏈路;對(duì)于帶流水線的持久連接模式,則正常發(fā)送或接收所述消息; 對(duì)于不帶流水線的持久連接摸式,則通過所述發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器分別 統(tǒng)計(jì)發(fā)送消息數(shù)和接收消息數(shù),并根據(jù)比較所述發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器的 統(tǒng)計(jì)值控制消息的發(fā)送和接收。
進(jìn)一步地,所述步驟C中,如果所述消息的種類為請(qǐng)求消息,則所述發(fā) 送線程對(duì)該消息進(jìn)行處理發(fā)送的具體過程包括確定HTTP應(yīng)用的模式,如果 為非持久連接,則通過套接字Socket將所述請(qǐng)求消息發(fā)給通信對(duì)端的對(duì)應(yīng)接收 線程;如果為帶流水線的持久連接,則通過Socket將所述請(qǐng)求消息發(fā)給通信對(duì) 端的對(duì)應(yīng)接收線程;如果為不帶流水線的持久連接,則判斷HTTP的發(fā)送計(jì)數(shù) 器的值是否等于接收計(jì)數(shù)器的值,若是,通過Socket將所述請(qǐng)求消息發(fā)給通信 對(duì)端的與所述HTTP鏈路的序號(hào)對(duì)應(yīng)的接收線程,之后把所述發(fā)送計(jì)數(shù)器的值 加l;否則,不處理所述請(qǐng)求消息,直到上一個(gè)請(qǐng)求的應(yīng)答到達(dá)才觸發(fā)發(fā)送。
進(jìn)一步地,步驟C中所述通信對(duì)端的接收線程收到請(qǐng)求消息后,確定 HTTP應(yīng)用的模式,如果為非持久連接,把所述請(qǐng)求消息發(fā)給HTTP應(yīng)用處理; 如果為帶流水線的持久連接,則把所述請(qǐng)求消息發(fā)給HTTP應(yīng)用處理;如果為 不帶流水線的持久連接,判斷HTTP發(fā)送計(jì)數(shù)器的值是否等于接收計(jì)數(shù)器的值, 若等于,把所述請(qǐng)求消息發(fā)給HTTP應(yīng)用處理,之后把所述接收計(jì)數(shù)器的值加 1;否則關(guān)閉所述HTTP鏈路。
較佳地,所述步驟C中,如果所述消息的種類為應(yīng)答消息,則所述發(fā)送 線程對(duì)該消息進(jìn)行處理發(fā)送的具體過程包括確定HTTP應(yīng)用的模式,如果 為非持久連接,則通過Socket將所述應(yīng)答消息發(fā)給通信對(duì)端的對(duì)應(yīng)接收線 程,之后關(guān)閉所述HTTP鏈路和TCP鏈路;如果為帶流水線的持久連接, 則通過Socket將所述應(yīng)答消息發(fā)給通信對(duì)端的對(duì)應(yīng)接收線程;如果為不帶 流水線的持久連接,則判斷HTTP的發(fā)送計(jì)數(shù)器加1后的值是否等于接收計(jì) 數(shù)器的值,若是,通過Socket將所述應(yīng)答消息發(fā)送給通信對(duì)端的對(duì)應(yīng)接收 線程,并把所述發(fā)送計(jì)數(shù)器的值加1;否則,關(guān)閉所述HTTP鏈路和TCP鏈路。
較佳地,步驟C中,所述通信對(duì)端的接收線程收到應(yīng)答消息后,確定
HTTP應(yīng)用的模式,如果是非持久連接,把所述應(yīng)答消息發(fā)給HTTP應(yīng)用處 理,然后關(guān)閉所述HTTP鏈路和TCP鏈路;如果是帶流水線的持久連接, 則把所述應(yīng)答消息發(fā)給HTTP應(yīng)用處理;如果是不帶流水線的持久連接,則 判斷HTTP發(fā)送計(jì)數(shù)器的值是否等于接收計(jì)數(shù)器加l后的值,若等于,把所 述應(yīng)答消息發(fā)給HTTP應(yīng)用處理,之后把所述接收計(jì)數(shù)器的值加1;否則關(guān) 閉所述HTTP鏈路和TCP鏈路。
進(jìn)一步地,在步驟A中進(jìn)一步配置HTTP鏈路與發(fā)送線程和接收線程的 關(guān)系,在發(fā)送或接收消息時(shí),通過所述HTTP鏈路對(duì)應(yīng)的發(fā)送線程或接收線 程進(jìn)行處理。
進(jìn)一步地,配置的HTTP鏈路與發(fā)送線程和接收線程的關(guān)系為發(fā)送線 程管理的HTTP鏈路的序號(hào)為整數(shù)與發(fā)送線程總個(gè)數(shù)的積與發(fā)送線程編號(hào) 的和,所述整數(shù)的范圍為大于等于0小于等于每個(gè)發(fā)送線程管理的HTTP 鏈路消息的總個(gè)數(shù)值減去1得到的差;接收線程管理的HTTP鏈路的序號(hào)為 整數(shù)與接收線程總個(gè)數(shù)的積與接收線程編號(hào)的和,所述整數(shù)的范圍為大于 等于0小于等于每個(gè)接收線程管理的HTTP鏈路消息的總個(gè)數(shù)值減去1得到 的差。
較佳地,所述接收線程編號(hào)滿足以下關(guān)系所述HTTP鏈路的序號(hào)減去 接收線程編號(hào)的差除以接收線程總個(gè)數(shù)得到的商為整數(shù),且所得到的整數(shù)小 于每個(gè)接收線程最多可以管理的消息數(shù)。
較佳地,所述發(fā)送線程編號(hào)滿足以下關(guān)系所述HTTP鏈路的序號(hào)減去 發(fā)送線程編號(hào)的差除以發(fā)送線程總個(gè)數(shù)得到的商為整數(shù),且所述整數(shù)小于每 個(gè)發(fā)送線程最多可以管理的消息個(gè)數(shù)。
進(jìn)一步地,所述TCP鏈路通過Socket將收到的消息發(fā)送給接收線程, 且接收線程調(diào)用select或poll函數(shù)獲得所述消息。
本發(fā)明在HTTP應(yīng)用中引入了發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器,通過對(duì)發(fā)送計(jì)
10數(shù)器和接收計(jì)數(shù)器的值進(jìn)行比較,使得HTTP應(yīng)用能夠同時(shí)應(yīng)用于非持久連 接、帶流水線的持久連接和不帶流水線的持久連接這三種模式;另外,本發(fā) 明引入了由多個(gè)發(fā)送線程和多個(gè)接收線程組成的線程池,每個(gè)發(fā)送線程和每 個(gè)接收線程均同時(shí)管理多條HTTP鏈路,且不論是發(fā)送線程還是接收線程對(duì) 數(shù)據(jù)的處理均是并行的,相互之間不影響,這樣就提高了消息處理的效率; 同時(shí),發(fā)送線程和接收線程所管理的每條HTTP鏈路既可以發(fā)送接收請(qǐng)求信 息,又可以發(fā)送接收應(yīng)答信息,HTTP應(yīng)用配置管理很多條HTTP鏈路, 所以HTTP應(yīng)用既可以作為客戶端,又可以作為服務(wù)器端;另外,本發(fā)明由 于在接收消息的時(shí)候,調(diào)用了 select或poll函數(shù),可以主動(dòng)快速接收數(shù)據(jù), 提高了接收消息的效率,而不是像現(xiàn)有技術(shù)一樣因?yàn)楸粍?dòng)等待數(shù)據(jù)的到來而 降低接收效率;本發(fā)明采用了發(fā)送線程和接收線程,同時(shí)建立了HTTP鏈路 與發(fā)送線程和接收線程之間的關(guān)系,對(duì)鏈路管理的這種方式使得能夠管理更 多的HTTP鏈路,提高了鏈路管理的擴(kuò)展性且管理起來更加方便。
圖1為非持久連接的HTTP大致流程示意圖2為不帶流水線的持久連接的HTTP大致流程示意圖3為帶流水線的持久連接的HTTP大致流程示意圖4A為本發(fā)明 >使用線程池實(shí)現(xiàn)HTTP應(yīng)用的方法流程示意圖4B為圖4A的方法流程中B部分所代表的方法流程示意圖5A為本發(fā)明一實(shí)施例的方法流程示意圖5B為圖5A的方法流程中B部分所代表的方法流程示意圖6為配置的HTTP鏈路與發(fā)送和接收線程的關(guān)系示意圖。
具體實(shí)施例方式
下面將結(jié)合附圖,對(duì)本發(fā)明的具體實(shí)施作進(jìn)一步詳細(xì)的說明。 本發(fā)明使用線程池實(shí)現(xiàn)HTTP應(yīng)用的方法流程如圖4所示,包括以下步驟
步驟401、事先對(duì)HTTP應(yīng)用進(jìn)行模式配置和HTTP鏈路與發(fā)送和接收 線程的關(guān)系配置。
這里,HTTP的應(yīng)用模式有三種, 一種為非持久連接,另外一種是帶流 水線的持久連接,第三種是不帶流水線的持久連接。
另外,HTTP鏈路與發(fā)送和接收線程的關(guān)系可以設(shè)定為假設(shè)所述HTTP 應(yīng)用配置管理m個(gè)HTTP鏈路,發(fā)送線程池總共包括a個(gè)發(fā)送線程,每個(gè)發(fā) 送線程管理m/a個(gè)HTTP鏈路的消息發(fā)送,假設(shè)發(fā)送線程的序號(hào)為i,則發(fā) 送線程池管理的HTTP鏈路的序號(hào)為i、 i+a、 i+2xa、 ...、 i+(m/a-l) xa,其 中i的取值范圍為0到a-1;接收線程池總共包括b個(gè)接收線程,每個(gè)接收 線程管理m/b個(gè)HTTP鏈路的消息發(fā)送,假設(shè)接收線程的序號(hào)為j,它管理
的HTTP鏈路的序號(hào)j、 j+b、 j+2xb.....i+(m/b-l) xb,其中j的取值范圍
為0到b-l。
這里,建立了 HTTP鏈路與發(fā)送線程和接收線程之間的關(guān)系,對(duì)鏈路管 理的這種方式使得能夠管理更多的HTTP鏈路,提高了鏈路管理的擴(kuò)展性。
步驟402、 HTTP應(yīng)用觸發(fā)鏈接TCP鏈路,并啟動(dòng)HTTP應(yīng)用的發(fā)送計(jì) 數(shù)器和接收計(jì)數(shù)器。
這里,觸發(fā)鏈接TCP鏈路指的是客戶端向服務(wù)端發(fā)起TCP鏈接,服務(wù) 端接收客戶端的鏈接。
步驟403 、 HTTP應(yīng)用的特定序號(hào)的HTTP鏈路接收到消息后,根據(jù)消 息格式判斷接收到的是否是請(qǐng)求消息,若是請(qǐng)求消息,則說明此時(shí)本地的通 信端為客戶端,所以將所接收到的請(qǐng)求消息發(fā)送到與所述HTTP鏈路的序號(hào) 對(duì)應(yīng)的發(fā)送線程的消息隊(duì)列中后執(zhí)行步驟404a 步驟410'a,或步驟404a ~ 步驟410"a;若是應(yīng)答消息,說明此時(shí)本地的通信端為服務(wù)器端,則參見圖 4B,將所接收到的應(yīng)答消息發(fā)送到與所述HTTP鏈路的序號(hào)對(duì)應(yīng)的發(fā)送線程 的消息隊(duì)列中后執(zhí)行步驟404b 步驟410'b,或步驟404b 步驟410"b。
這里,所述HTTP鏈路的序號(hào)二發(fā)送線程編號(hào)+xx發(fā)送線程的總個(gè)數(shù),且X小于每個(gè)發(fā)送線程最多可以管理的消息個(gè)數(shù),X為整數(shù)。
步驟404a、所述發(fā)送線程將所述請(qǐng)求消息插入與所述HTTP鏈路的序號(hào) 對(duì)應(yīng)的發(fā)送消息緩沖區(qū)。
步驟405a、所述發(fā)送線程根據(jù)所述HTTP鏈路的配置屬性確定HTTP 的模式,如果為非持久連接的HTTP,則執(zhí)行步驟406'a;如果是帶流水線的 持久連接的HTTP,則執(zhí)行步驟406"a;如果是不帶流水線的持久連接的 HTTP,則執(zhí)行步驟406"'a。
步驟406'a、如果是非持久連接的HTTP,所述發(fā)送線程直接將發(fā)送消息 緩沖區(qū)的所述請(qǐng)求消息發(fā)給所述HTTP鏈路的序號(hào)對(duì)應(yīng)的Socket,之后執(zhí)行 步驟407a。
步驟406"a、如果是帶流水線的持久連接的HTTP,所述發(fā)送線程直接 將發(fā)送消息緩沖區(qū)的所述請(qǐng)求消息發(fā)給所述HTTP鏈路的序號(hào)對(duì)應(yīng)的 Socket,之后執(zhí)行步驟407a。
步驟406"'a、如果是不帶流水線的持久連接的HTTP,所述發(fā)送線程判 斷HTTP的發(fā)送計(jì)數(shù)器的值是否等于接收計(jì)數(shù)器的值,若是,所述發(fā)送線程 將發(fā)送消息緩沖區(qū)的所述請(qǐng)求消息發(fā)給與所述HTTP鏈路的序號(hào)對(duì)應(yīng)的服 務(wù)器端Socket,并把所述發(fā)送計(jì)數(shù)器的值加1,之后執(zhí)行步驟407a;否則, 將所述請(qǐng)求消息放在發(fā)送緩沖區(qū)不處理,等待上一個(gè)請(qǐng)求的應(yīng)答到達(dá)才觸發(fā) 發(fā)送。
步驟407a、所述Socket將所述請(qǐng)求消息發(fā)給與自身對(duì)應(yīng)的Socket,即 服務(wù)器端的Socket,后續(xù)的步驟由服務(wù)器端執(zhí)行;在服務(wù)器端,與所述HTTP 鏈路的序號(hào)對(duì)應(yīng)的接收線程調(diào)用select或poll從與所述Socket對(duì)應(yīng)的Socket 獲得所述請(qǐng)求消息。
這里,所述HTTP鏈路的序號(hào)—妄收線程編號(hào)+yx接收線程總個(gè)數(shù),其中,
y小于每個(gè)接收線程最多可以管理的消息數(shù),y為整數(shù)。
另外,select或poll是現(xiàn)有技術(shù)中從Socket主動(dòng)接收數(shù)據(jù)的兩種函數(shù), 由于此處調(diào)用了這兩種函數(shù),可以快速接收數(shù)據(jù),因此提高了接收消息的效率,而不是像現(xiàn)有技術(shù)被動(dòng)地等待數(shù)據(jù)的到'來,縮短了數(shù)據(jù)接收的時(shí)間。
select或poll的具體功能屬于現(xiàn)有技術(shù),在此不再贅述。
步驟408a、所述接收線程將所述請(qǐng)求消息插入與所述HTTP鏈路的序號(hào) 對(duì)應(yīng)的接收消息緩沖區(qū)。
步驟409a、所述纟矣收線程根據(jù)所述HTTP鏈^各的配置屬性確定HTTP 的模式,若是非持久連接的HTTP,則執(zhí)行步驟410'a;若是帶流水線的持久 連接的HTTP,則執(zhí)行步驟410"a;若是不帶流水線的持久連接的HTTP,則 執(zhí)行步驟410'"a.
步驟410'a、所述接收線程把所述接收消息緩沖區(qū)的所述請(qǐng)求消息發(fā)給 HTTP應(yīng)用處理,之后執(zhí)行步驟402。
步驟410"a、所述接收線程把所述接收消息緩沖區(qū)的所述請(qǐng)求消息發(fā)給 HTTP應(yīng)用處理,然后執(zhí)4亍步驟403。
步驟410'"a、所述接收線程判斷HTTP發(fā)送計(jì)數(shù)器的值是否等于接收計(jì) 數(shù)器的值,若等于,把所述接收消息緩沖區(qū)的所述請(qǐng)求消息發(fā)給HTTP應(yīng)用 處理,之后把所述接收計(jì)數(shù)器的值加1,然后執(zhí)行步驟403;否則關(guān)閉所述 HTTP鏈路。
參見圖4B,在步驟403中,如果接收到的是應(yīng)答消息,則將所接收到 的應(yīng)答消息發(fā)送到與所述HTTP鏈路的序號(hào)對(duì)應(yīng)的發(fā)送線程的消息隊(duì)列中, 并執(zhí)行下述步驟
步驟404b、所述發(fā)送線程將所述應(yīng)答消息插入與所述HTTP鏈路的序 號(hào)對(duì)應(yīng)的發(fā)送消息緩沖區(qū)。
步驟405b、所述發(fā)送線程根據(jù)所述HTTP鏈路的配置屬性確定HTTP 的模式,如果是非持久連接的HTTP,則執(zhí)行步驟406'b;如果是帶流水線的 持久連接的HTTP,則執(zhí)行步驟406"b;如果是不帶流水線的持久連接的 HTTP,則執(zhí)行步驟楊'"b。
步驟406'b、如果是非持久連接的HTTP,所述發(fā)送線程直接發(fā)送緩沖區(qū) 的所述應(yīng)答消息給與所述HTTP鏈路的序號(hào)對(duì)應(yīng)的Socket,之后關(guān)閉所述
14HTTP鏈路及TCP鏈路,然后執(zhí)行步驟407b。
步驟406"b、如果是帶流水線的持久連接的HTTP,所述發(fā)送線程直接 發(fā)送緩沖區(qū)的所述應(yīng)答消息給與所述HTTP鏈路的序號(hào)對(duì)應(yīng)的Socket,然后 執(zhí)行步驟407b 。
步驟406'"b、如果是不帶流水線的持久連接的HTTP,所述發(fā)送線程判 斷HTTP的發(fā)送計(jì)數(shù)器加l后的值是否等于接收計(jì)數(shù)器的值,若是,發(fā)送緩 沖區(qū)的所述應(yīng)答消息給與所述HTTP鏈路的序號(hào)對(duì)應(yīng)的Socket,并把所述發(fā) 送計(jì)數(shù)器的值加l,之后執(zhí)行步驟407b;否則,關(guān)閉所述HTTP鏈路。
步驟407b、所述Socket將所述應(yīng)答消息發(fā)給與自身對(duì)應(yīng)的Socket即客 戶端的Socket,后續(xù)的步驟由客戶端執(zhí)行;在客戶端,與所述HTTP鏈路的 序號(hào)對(duì)應(yīng)的接收線程調(diào)用select或poll從與所述Socket對(duì)應(yīng)的Socket獲得 所述應(yīng)答消息。步驟407b及其以后的步驟由客戶端執(zhí)行。
同理,所述HTTP鏈路的序號(hào)二接收線程編號(hào)+yx接收線程總個(gè)數(shù),其中, y小于每個(gè)接收線程最多可以管理的消息數(shù),y為整數(shù)。
步驟408b 、所述接收線程將所述應(yīng)答消息插入與所述HTTP鏈路的序 號(hào)對(duì)應(yīng)的接收消息i爰沖區(qū)。
步驟409b、所述接收線程根據(jù)所述HTTP鏈路的配置屬性確定HTTP 的模式,若是非持久連接的HTTP,則執(zhí)行步驟410' b;若是帶流水線的持 久連接的HTTP,則執(zhí)行步驟410"b;若是不帶流水線的持久連接的HTTP, 則執(zhí)行步驟410"' b。
步驟410'b、所述接收線程把所述接收消息緩沖區(qū)的所述應(yīng)答消息發(fā)給 HTTP應(yīng)用處理,關(guān)閉所述HTTP鏈路及TCP鏈路后執(zhí)行步驟402;
步驟410"b、所述接收線程把所述接收消息緩沖區(qū)的所述應(yīng)答消息發(fā)給 HTTP應(yīng)用處理,然后執(zhí)行步驟403。步驟410"'b、所述接收線程判斷HTTP 發(fā)送計(jì)數(shù)器的值是否等于接收計(jì)數(shù)器加1后的值,若等于,把所述接收消息 緩沖區(qū)的所述應(yīng)答消息發(fā)給HTTP應(yīng)用處理,之后把所述接收計(jì)數(shù)器的值加 1,然后執(zhí)行步驟403;否則關(guān)閉所述HTTP鏈路。本發(fā)明一實(shí)施例的方法流程如圖5所示,包括以下步驟 步驟501 、事先對(duì)HTTP應(yīng)用進(jìn)行模式配置和HTTP鏈路與發(fā)送和接收 線程的關(guān)系配置。
這里,HTTP的應(yīng)用模式同樣有三種, 一種為非持久連接,另外一種是 帶流水線的持久連接,第三種是不帶流水線的持久連接。
另外,配置的HTTP鏈路與發(fā)送和接收線程的關(guān)系如圖6所示,如圖6 所示,假設(shè)所述HTTP應(yīng)用配置管理500個(gè)HTTP鏈路,發(fā)送線程池總共包 括5個(gè)發(fā)送線程,每個(gè)發(fā)送線程管理100個(gè)HTTP鏈路的消息發(fā)送,假設(shè)發(fā)
送線程的序號(hào)為i,它管理的HTTP鏈路的序號(hào)i、 i+5、 i+2x5.....i+99x5,
其中i的取值范圍為0~4;
接收線程池總共包括10個(gè)接收線程,每個(gè)接收線程管理50個(gè)HTTP鏈 路的消息發(fā)送,假設(shè)接收線程的序號(hào)為j,它管理的HTTP鏈路的序號(hào)j、j+10、 j+2xl0.....i+49xl0,其中,j的耳又^直范圍為0~ 9。
步驟502、 HTTP應(yīng)用觸發(fā)鏈接TCP鏈路,并啟動(dòng)HTTP應(yīng)用的發(fā)送計(jì) 數(shù)器和接收計(jì)數(shù)器。
步驟503、 HTTP應(yīng)用的序號(hào)為500的HTTP《連路4矣收到上層應(yīng)用消息 后,根據(jù)消息格式判斷接收到的是否是請(qǐng)求消息,若是請(qǐng)求消息,說明此時(shí) 本地通信端為客戶端,則將所接收到的請(qǐng)求消息發(fā)送到與所述HTTP鏈路的 序號(hào)500對(duì)應(yīng)的5號(hào)發(fā)送線程的消息隊(duì)列中后執(zhí)行步驟504a 步驟510'a, 或步驟504a 步驟510"a;若是應(yīng)答消息,說明此時(shí)本地通信端為服務(wù)器端, 則參見圖5B,將所接收到的應(yīng)答消息發(fā)送到與所述HTTP鏈路的序號(hào)500 對(duì)應(yīng)的5號(hào)發(fā)送線程的消息隊(duì)列中后執(zhí)行步驟504b 步驟510'b,或步驟 504b 步驟510"b。
這里,因?yàn)镠TTP鏈路的序號(hào)為500 ,根據(jù)步驟51中的HTTP鏈路與 發(fā)送和接收線程的關(guān)系配置^L則,可知500=5+99x5,所以與所述HTTP 鏈路的序號(hào)500對(duì)應(yīng)的發(fā)送線程編號(hào)為5。
步驟504a、 5號(hào)發(fā)送線程將所述請(qǐng)求消息插入與所述HTTP鏈路的序號(hào)
16500對(duì)應(yīng)的發(fā)送消息緩沖區(qū)。
步驟505a、 5號(hào)發(fā)送線程根據(jù)所述HTTP鏈路的配置屬性確定HTTP的 模式,如果是非持久連接的HTTP,則執(zhí)行步驟506'a;如果是帶流水線的持 久連接的HTTP,則執(zhí)行步驟506"a;如果是不帶流水線的持久連接的HTTP, 則執(zhí)行步驟506'"a。
步驟506'a、如果是非持久連接的HTTP, 5號(hào)發(fā)送線程直接發(fā)送緩沖區(qū) 的所述請(qǐng)求消息給與所述HTTP鏈路的序號(hào)500對(duì)應(yīng)的Socket,之后執(zhí)行步 驟507a。
步驟506"a、如果是帶流水線的持久連接的HTTP, 5號(hào)發(fā)送線程直接發(fā) 送緩沖區(qū)的所述請(qǐng)求消息給與所述HTTP鏈路的序號(hào)500對(duì)應(yīng)的Socket,之 后執(zhí)行步驟507a。
步驟506"'a、如果是不帶流水線的持久連接的HTTP, 5號(hào)發(fā)送線程判 斷HTTP的發(fā)送計(jì)數(shù)器的值是否等于接收計(jì)數(shù)器的值,若是,發(fā)送緩沖區(qū)的 所述請(qǐng)求消息給與所述HTTP鏈路的序號(hào)500對(duì)應(yīng)的Socket,并把所述發(fā)送 計(jì)數(shù)器的值加1,之后執(zhí)行步驟507a;否則,將所述請(qǐng)求消息放在所述HTTP 鏈路的發(fā)送緩沖區(qū)不處理,等待上一個(gè)請(qǐng)求的應(yīng)答才觸發(fā)發(fā)送。
步驟507a、所述Socket將所述請(qǐng)求消息發(fā)給與自身對(duì)應(yīng)的Socket即服 務(wù)器端Socket,后續(xù)步驟由服務(wù)器端執(zhí)行;在服務(wù)器端,與所述HTTP鏈路 的序號(hào)500對(duì)應(yīng)的10號(hào)接收線程調(diào)用select或poll從與所述Socket對(duì)應(yīng)的 Socket獲得所述請(qǐng)求消息。
這里,因?yàn)?00=10+49x10,所以10號(hào)接收線程接收所述請(qǐng)求消息。
步驟508a、 10號(hào)接收線程將所述請(qǐng)求消息插入與所述HTTP鏈路的序 號(hào)500對(duì)應(yīng)的接收消息緩沖區(qū)。
步驟509a、 10號(hào)接收線程根據(jù)所述HTTP鏈i 各的配置屬性確定HTTP 的模式,若是非持久連接的HTTP,則執(zhí)行步驟510'a;若是帶流水線的持久 連接的HTTP,則執(zhí)行步驟510"a;若是不帶流水線的持久連接的HTTP,則 執(zhí)行步驟510'"a;步驟510'a、 10號(hào)接收線程把所述接收消息緩沖區(qū)的所述請(qǐng)求消息發(fā)給 HTTP應(yīng)用處理,之后執(zhí)行步驟502。
步驟510"a、 10號(hào)接收線程把所述接收消息緩沖區(qū)的所述請(qǐng)求消息發(fā)給 HTTP應(yīng)用處理,然后^丸行步驟503。
步驟510'"a、 10號(hào)接收線程判斷HTTP發(fā)送計(jì)數(shù)器的值是否等于接收計(jì) 數(shù)器的值,若等于,把所述接收消息緩沖區(qū)的所述請(qǐng)求消息發(fā)給HTTP應(yīng)用 處理,之后把所述接收計(jì)數(shù)器的值加1,然后執(zhí)行步驟503;否則關(guān)閉所述 HTTP鏈路。
步驟504b、 5號(hào)發(fā)送線程將所述應(yīng)答消息插入與所述HTTP鏈路的序號(hào) 500對(duì)應(yīng)的發(fā)送消息i爰沖區(qū)。
步驟505b、 5號(hào)發(fā)送線程根據(jù)所述HTTP鏈路的配置屬性確定HTTP的 模式,如果是非持久連接的HTTP,則執(zhí)行步驟506'b;如果是帶流水線的持 久連接的HTTP,則執(zhí)行步驟506"b;如果是不帶流水線的持久連接的HTTP, 則執(zhí)行步驟506'"b。
步驟506'b、如果是非持久連接的HTTP, 5號(hào)發(fā)送線程直接發(fā)送緩沖區(qū) 的所述應(yīng)答消息給與所述HTTP鏈路的序號(hào)500對(duì)應(yīng)的Socket,之后關(guān)閉所 述HTTP鏈路和TCP鏈路,然后執(zhí)行步驟507b。
步驟506"b、如果是帶流水線的持久連接的HTTP, 5號(hào)發(fā)送線程直接發(fā) 送緩沖區(qū)的所述應(yīng)答消息給與所述HTTP鏈路的序號(hào)500對(duì)應(yīng)的Socket,之 后執(zhí)行步驟507b。
步驟506"'b、如果是不帶流水線的持久連接的HTTP, 5號(hào)發(fā)送線程判 斷HTTP的發(fā)送計(jì)數(shù)器加l后的值是否等于接收計(jì)數(shù)器的值,若是,發(fā)送緩 沖區(qū)的所述應(yīng)答消息給與所述HTTP鏈路的序號(hào)500對(duì)應(yīng)的Socket,并4巴所 述發(fā)送計(jì)數(shù)器的值加l,之后執(zhí)行步驟507b;否則,關(guān)閉所述HTTP鏈路。
步驟507b、所述Socket將所述應(yīng)答消息發(fā)給與自身對(duì)應(yīng)的Socket即客 戶端的Socket;在客戶端,與所述HTTP鏈^^的序號(hào)500對(duì)應(yīng)的10號(hào)"^妻收 線程調(diào)用select或poll從與所述Socket對(duì)應(yīng)的Socket獲得所述應(yīng)答消息。這里,因?yàn)?00=10+49x10,所以10 f接收線程接收所述應(yīng)答消息。
步驟508b、 10號(hào)接收線程將所述應(yīng)答消息插入與所述HTTP鏈路的序 號(hào)500對(duì)應(yīng)的接收消息緩沖區(qū)。
步驟509b、 10號(hào)接收線程根據(jù)所述HTTP鏈路的配置屬性確定HTTP 的模式,若是非持久連接的HTTP,則執(zhí)行步驟510' b;若是帶流水線的持 久連接的HTTP,則執(zhí)行步驟510"b;若是不帶流水線的持久連接的HTTP, 則執(zhí)行步驟510", b。
步驟510'b、 10號(hào)接收線程把所述接收消息緩沖區(qū)的所述應(yīng)答消息發(fā)給 HTTP應(yīng)用處理,關(guān)閉所述HTTP鏈路及TCP鏈路后執(zhí)行步驟502;
步驟510"b、 IO號(hào)接收線程把所述接收消息緩沖區(qū)的所述應(yīng)答消息發(fā)給 HTTP應(yīng)用處理,然后執(zhí)行步驟503。
步驟510'" b、 10號(hào)接收線程判斷HTTP發(fā)送計(jì)數(shù)器的值是否等于接收 計(jì)數(shù)器加1后的值,若等于,把所述接收消息緩沖區(qū)的所述應(yīng)答消息發(fā)給 HTTP應(yīng)用處理,之后把所述接收計(jì)數(shù)器的值加1,然后執(zhí)行步驟503;否 則關(guān)閉所述HTTP鏈路。
綜上,本發(fā)明在HTTP應(yīng)用中引入了發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器,通過對(duì) 發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器的值進(jìn)行比較,使得HTTP應(yīng)用能夠同時(shí)應(yīng)用于非 持久連接、帶流水線的持久連接和不帶流水線的持久連接這三種模式。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù) 范圍。
權(quán)利要求
1、一種使用線程池實(shí)現(xiàn)超文本傳輸協(xié)議HTTP應(yīng)用的方法,其特征在于,該方法包括以下步驟A、對(duì)HTTP應(yīng)用進(jìn)行模式配置;B、HTTP應(yīng)用觸發(fā)鏈接TCP鏈路和HTTP鏈路,并啟動(dòng)HTTP應(yīng)用的發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器;C、所述HTTP鏈路如果收到HTTP應(yīng)用提交的要發(fā)送的消息,則通過發(fā)送線程處理發(fā)送該消息,如果收到對(duì)端TCP鏈路的消息,則通過接收線程處理接收該消息;所述發(fā)送線程和接收線程在處理過程中具體根據(jù)所述HTTP應(yīng)用的模式和所述消息的消息類型進(jìn)行區(qū)別處理,其中對(duì)于非持久連接模式,在發(fā)送完應(yīng)答消息或接收完應(yīng)答消息后,關(guān)閉對(duì)應(yīng)的HTTP鏈路和TCP鏈路;對(duì)于帶流水線的持久連接模式,則正常發(fā)送或接收所述消息;對(duì)于不帶流水線的持久連接模式,則通過所述發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器分別統(tǒng)計(jì)發(fā)送消息數(shù)和接收消息數(shù),并根據(jù)比較所述發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器的統(tǒng)計(jì)值控制消息的發(fā)送和接收。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C中,如果所 述消息的種類為請(qǐng)求消息,則所述發(fā)送線程對(duì)該消息進(jìn)行處理發(fā)送的具體過 程包括確定HTTP應(yīng)用的模式,如果為非持久連接,則通過套接字Socket將 所述請(qǐng)求消息發(fā)給通信對(duì)端的對(duì)應(yīng)接收線程;如果為帶流水線的持久連接,則 通過Socket將所述請(qǐng)求消息發(fā)給通信對(duì)端的對(duì)應(yīng)接收線程;如果為不帶流水線 的持久連接,則判斷HTTP的發(fā)送計(jì)數(shù)器的值是否等于接收計(jì)數(shù)器的值,若是, 通過Socket將所述請(qǐng)求消息發(fā)給通信對(duì)端的與所述HTTP鏈路的序號(hào)對(duì)應(yīng)的接 收線程,之后把所述發(fā)送計(jì)數(shù)器的值加1;否則,不處理所述請(qǐng)求消息,直到 上一個(gè)請(qǐng)求的應(yīng)答到達(dá)才觸發(fā)發(fā)送。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,步驟C中所述通信對(duì)端 的接收線程收到請(qǐng)求消息后,確定HTTP應(yīng)用的模式,如果為非持久連接,把所述請(qǐng)求消息發(fā)給HTTP應(yīng)用處理;如果為帶流水線的持久連接,則把所述請(qǐng) 求消息發(fā)給HTTP應(yīng)用處理;如果為不帶流水線的持久連接,判斷HTTP發(fā)送 計(jì)數(shù)器的值是否等于接收計(jì)數(shù)器的值,若等于,把所述請(qǐng)求消息發(fā)給HTTP應(yīng) 用處理,之后把所述接收計(jì)數(shù)器的值加1;否則關(guān)閉所述HTTP鏈路。
4、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C中,如果所 述消息的種類為應(yīng)答消息,則所述發(fā)送線程對(duì)該消息進(jìn)行處理發(fā)送的具體過 程包括確定HTTP應(yīng)用的模式,如果為非持久連接,則通過Socket將所 述應(yīng)答消息發(fā)給通信對(duì)端的對(duì)應(yīng)接收線程,之后關(guān)閉所述HTTP鏈路和TCP 鏈路;如果為帶流水線的持久連接,則通過Socket將所述應(yīng)答消息發(fā)給通 信對(duì)端的對(duì)應(yīng)接收線程;如果為不帶流水線的持久連接,則判斷HTTP的發(fā) 送計(jì)數(shù)器加1后的值是否等于接收計(jì)數(shù)器的值,若是,通過Socket將所述 應(yīng)答消息發(fā)送給通信對(duì)端的對(duì)應(yīng)接收線程,并把所述發(fā)送計(jì)數(shù)器的值加1; 否則,關(guān)閉所述HTTP鏈路和TCP鏈路。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,步驟C中,所述通信對(duì) 端的接收線程收到應(yīng)答消息后,確定HTTP應(yīng)用的模式,如果是非持久連接, 把所述應(yīng)答消息發(fā)給HTTP應(yīng)用處理,然后關(guān)閉所述HTTP鏈路和TCP鏈 路;如果是帶流水線的持久連接,則把所述應(yīng)答消息發(fā)給HTTP應(yīng)用處理; 如果是不帶流水線的持久連接,則判斷HTTP發(fā)送計(jì)數(shù)器的值是否等于接收 計(jì)數(shù)器加l后的值,若等于,把所述應(yīng)答消息發(fā)給HTTP應(yīng)用處理,之后把 所述接收計(jì)數(shù)器的值加1;否則關(guān)閉所述HTTP鏈路和TCP鏈路。
6、 根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟A中進(jìn)一步配置 HTTP鏈路與發(fā)送線程和接收線程的關(guān)系,在發(fā)送或接收消息時(shí),通過所述 HTTP鏈路對(duì)應(yīng)的發(fā)送線程或接收線程進(jìn)行處理。
7、 根據(jù)權(quán)利要求6所述的方法,其特征在于,配置的HTTP鏈路與發(fā) 送線程和接收線程的關(guān)系為發(fā)送線程管理的HTTP鏈路的序號(hào)為整數(shù)與 發(fā)送線程總個(gè)數(shù)的積與發(fā)送線程編號(hào)的和,所述整數(shù)的范圍為大于等于O 小于等于每個(gè)發(fā)送線程管理的HTTP鏈路消息的總個(gè)數(shù)值減去1得到的差;接收線程管理的HTTP鏈路的序號(hào)為整數(shù)與接收線程總個(gè)數(shù)的積與接收線 程編號(hào)的和,所述整數(shù)的范圍為大于等于O小于等于每個(gè)接收線程管理的 HTTP鏈路消息的總個(gè)數(shù)值減去1得到的差。
8、 根據(jù)權(quán)利要求7所述的方法,其特征在于,所述接收線程編號(hào)滿足 以下關(guān)系所述HTTP鏈路的序號(hào)減去接收線程編號(hào)的差除以接收線程總個(gè) 數(shù)得到的商為整數(shù),且所得到的整數(shù)小于每個(gè)接收線程最多可以管理的消息 數(shù)。
9、 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述發(fā)送線程編號(hào)滿足 以下關(guān)系所述HTTP鏈路的序號(hào)減去發(fā)送線程編號(hào)的差除以發(fā)送線程總個(gè) 數(shù)得到的商為整數(shù),且所述整數(shù)小于每個(gè)發(fā)送線程最多可以管理的消息個(gè)數(shù)。
10、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述TCP《連路通過Socket 將收到的消息發(fā)送給接收線程,且接收線程調(diào)用select或poll函數(shù)獲得所述 消息。
全文摘要
本發(fā)明公開了一種使用線程池實(shí)現(xiàn)超文本傳輸協(xié)議(HTTP)應(yīng)用的方法,對(duì)HTTP應(yīng)用進(jìn)行模式配置;HTTP應(yīng)用觸發(fā)鏈接TCP鏈路和HTTP鏈路,并啟動(dòng)HTTP應(yīng)用的發(fā)送計(jì)數(shù)器和接收計(jì)數(shù)器;所述HTTP鏈路如果收到HTTP應(yīng)用提交的要發(fā)送的消息,則通過發(fā)送線程處理發(fā)送該消息,如果收到對(duì)端TCP鏈路的消息,則通過接收線程處理接收該消息;所述發(fā)送線程和接收線程在處理過程中具體根據(jù)所述HTTP應(yīng)用的模式和所述消息的消息類型進(jìn)行區(qū)別處理。利用本發(fā)明,使得HTTP應(yīng)用能同時(shí)適用于非持久連接、帶流水線的持久連接和不帶流水線的持久連接三種HTTP模式。
文檔編號(hào)H04L29/08GK101621532SQ20081012912
公開日2010年1月6日 申請(qǐng)日期2008年6月30日 優(yōu)先權(quán)日2008年6月30日
發(fā)明者戴書球 申請(qǐng)人:中興通訊股份有限公司