新四季網

一種基於非阻塞機制的http報文處理方法

2023-08-03 02:26:36 3

專利名稱:一種基於非阻塞機制的http報文處理方法
技術領域:
本發明涉及一種基於非阻塞機制的HTTP報文處理方法,主要是用於HTTP伺服器系統。
背景技術:
大型的HTTP伺服器必須能夠以不可預期的規模來處理並發請求。並發的網絡請求和 大規模的網絡負載,要求實現一個並發性能高、可伸縮性強的伺服器系統。目前,構建一個高性能的HTTP伺服器系統,最為普遍的方式有兩種基於多線程的 實現方式和基於事件驅動的實現方式。基於多線程的實現方式,雖然能夠解決阻塞所導致 的等待、有效的利用系統的並發性、縮短用戶響應時間,但是線程是一種重要的系統資源, 分配的線程越多,系統的開銷也就越大。對於一個給定的系統,它能支持的線程有一個閾 值,超過這個閾值,其性能就會有大幅度的降低。 一個解決的辦法就是採用線程池,這樣 就能有效的節省線程創建、切換和回收的系統開銷,然而,如果面對大規模的網絡負載, 顯然,超過線程數量的請求只能等待,而且系統花在線程調度上的時間會大於網絡操作的 時間。基於事件驅動的實現方式,有效的利用了 Reactor模式和非阻塞10,當各種IO事件一 旦準備就緒,就觸發應用程式接收並做相應處理,處理完畢立即返回,應用程式不再等待 10請求,這樣就可以用單一線程來模擬多線程並發。這種方法,被稱之為傳統的非阻塞方 法。它雖然避免了由於阻塞而導致的線程創建、切換和回收的系統開銷,但是沒有能夠利 用SMP (Symmetrical Multi-Processing)系統多處理器的並發能力。同時,由於一個線程需 要處理所有請求,從而增加了單點失效的可能性,也相應的提高了編程的複雜度。一個有效的辦法是結合多線程和事件驅動兩者的優勢,設計出一種混合的模型。這方 面,Matt Welsh在它的高並發網絡框架Sandstorm及其應用Haboob伺服器中早有體現。但 是他並沒有充分利用非阻塞的特點,儘量做到零拷貝和一次遍歷,從一定意義上講,它只 是基於非阻塞10的混合式HTTP伺服器。 發明內容本發明的目的是提供一種基於非阻塞機制的HTTP報文處理方法,該方法規定了 HTTP伺服器中如何以非阻塞的方式處理HTTP報文,從而達到零拷貝和一次遍歷的效果,以大 大提高HTTP報文的處理效率。 '為實現上述目的,本發明採取以下技術方案其前提是建立起基於非阻塞機制的HTTP 伺服器的線程模型,如圖1所示,該伺服器的線程模型包括四個組件,即select線程,負責 偵聽各種非阻塞IO事件的發生並負責和客戶端建立連接;線程池,它由多個工作線程組成, 每個工作線程包含有一個事件隊列,每一個事件隊列存放多種類型的事件即任務,即在實 現上糅合了多線程和事件驅動兩者的優點;連接——線程映射表,其key值為連接,其value 值為線程,根據該映射表,從而使得一個連接的所有任務在一個線程中執行,從而避免了 因為不同步所導致的錯誤;數據緩衝池,是存放報文的數據結構,它由兩個數據緩衝鏈組 成,其一為busy鏈,表示正在使用的數據緩衝的集合,其二為free鏈,表示已經存在但當 時未被使用的緩衝集合。因此,數據緩衝池由多個數據緩衝組成,每一個數據緩衝在某一 個時刻只保存一個連接的報文,當讀取分配數據緩衝的過程報文處理完畢,該緩衝池回收 相應的數據緩衝,避免了下次再分配和銷毀的開銷。在此線程模型基礎上, 一個數據報文 的處理過程包括以下步驟-A、 當讀事件觸發,讀取HTTP報文,將其存放於數據緩衝中;B、 判斷該報文是否需要解析報文頭,是則轉C,否則轉D;C、 判斷報文頭是否已經完整到達,是則解析報文頭,否則轉A;D、 判斷報文體是否己經完整到達,是則解析報文體,否則轉A;E、 解析完畢,將數據緩衝回收至數據緩衝池。本發明與現有技術相比的優點在於本發明通過線程池和事件隊列,糅合了多線程和事件驅動兩者的優點,通過連接——線程的映射表,保證了一個連接的報文讀取、報文解析、報文響應在一個線程中完成,從而為非阻塞的HTTP報文處理方法奠定了基礎。另外, 數據緩衝描述符即指向數據緩衝的指針、解析進度標示、m-position、p-position以及f-position 的定義,使得HTTP報文在解析的過程中,儘量做到零拷貝和一次遍歷,實現了真正的非 阻塞機制,大大的提高了 HTTP報文的處理效率。


圖1為本發明基於非阻塞機制的HTTP伺服器線程模型。 圖2為本發明HTTP報文的非阻塞處理方法;具體實施方式
本發明公開的非阻塞機制,不僅僅是指在請求的建立、數據的讀取以及響應的發送過 程中不再等待IO請求的完成而是直接返回此即非阻塞IO,還包括在數據的解析過程中的非阻塞方法即異步解析算法。本發明公開的基於非阻塞機制的HTTP報文處理方法,是基於圖1所示的基於非阻塞 機制的HTTP伺服器的線程模型,即HTTP伺服器如何以非阻塞機制來處理HTTP報文的 過程。select線程和傳統的listener線程不一樣,它不僅用來偵聽各種非阻塞10事件的發生 諸如accept、 read、 write等,同時它還負責和客戶端建立連接即處理accept事件以及部分 的write事件。和Haboob—樣,本發明融合了基於事件驅動的非阻塞10和多線程的優勢, 設計出了一種複合的模型,所不同的是,本發明的每一個線程都有一個事件隊列,而這個 事件隊列中可以存放多種類型的事件。當它接受到read事件時,將其插入到工作線程的事 件隊列,由工作線程來讀取數據,數據讀取完畢,如果當前工作線程還未切換,接著解析 數據,否則生成解析事件,插入到事件隊列中。當一個請求解析完畢,工作線程開始構造 其響應報文並發送,在發送的過程中,如果數據無法一次發送完,那麼則需要向select線程 註冊寫事件,由select線程完成剩下的發送工作。因此,工作線程所維護的事件隊列可以有 read、 parse、 response三種類型的事件。這樣, 一個連接的處理過程,被分為不同的事件來 進行,這樣的事件定義為任務。因此,本發明可以用一個線程來並發處理多個連接,而一 個連接的所有任務則在事件隊列中以不相鄰的方式進行。為了提高並發性,本發明依舊採 用了線程池,線程的調度必須根據連接——線程的映射表,以確保一個連接的上述三種類 型的事件在一個線程中完成,從而避免了因為不同步所導致的錯誤。由於非阻塞IO的原因,伺服器端一次收到的報文有可能不是一個完整地HTTP報文, 為了儘量避免數據的多次拷貝和多次遍歷的系統開銷,本發明用大小動態變化的數據緩衝 來保存讀取到的數據,該數據緩衝來源於數據緩衝區,同時定義三個位置和一個解析進度 標識,三個位置即m-position, p-position和f-position,分別記錄已經有效解析的位置,當前 正在解析的位置和當前報文片斷的結束位置。如圖2所示,本發明公開的基於非阻塞機制 HTTP報文處理方法,具體包括以下步驟1、 當讀事件觸發,讀取HTTP報文,將其存放於數據緩衝中;2、 判斷該報文是否需要解析報文頭,是則轉3,否則轉4;3、 判斷報文頭是否已經完整到達,是則解析報文頭,否則轉h4、 判斷報文體是否已經完整到達,是則解析報文體,否則轉l;5、 解析完畢,將數據緩衝回收至數據緩衝池; 以下進一步詳細說明。1.在上述第l步中,當讀事件觸發時,select線程獲取讀事件,由工作線程完成報文 數據的讀取,並保存至緩衝中。數據緩衝的分配方法如下a. 若free鏈中存在著緩衝節點,則從free鏈中刪除隊尾節點,同時在busy鏈的隊尾添 加一個節點。b. 若free鏈中不存在緩衝節點,則從當前內存中獲取一個數據緩衝,並在busy鏈的 隊尾添加一個節點。數據緩衝的使用方法如下-a.當一個連接的報文片斷第一次到達時,分配一個初始大小的數據緩衝,並初始化 tn-position、 p-position禾卩f-position位置為0;c. 若當前緩衝足夠容納該報文片斷,將數據讀入數據緩衝中,附在從f-position開始 的緩衝區內,讀取完畢修改當前報文片斷的結束位置為f-positkm;d. 若當前緩衝不夠容納該報文片斷,則分配另外一個數據緩衝形成緩衝鏈,以存放剩 下的報文片斷,轉b;e. 數據解析完畢,將數據緩衝鏈回收至數據緩衝池中。 判斷當前請求報文的處理進度,並調用與之相對應的報文處理方法。2. 根據解析進度標示判斷該HTTP報文是否需要解析報文頭,若解析進度標示顯示報 文頭還未解析完畢則轉步驟3,若解析進度標示顯示報文頭已經解析完畢,則轉步驟4;3、 報文頭的處理方法如果當前報文的處理進度顯示還未處理報文頭,則報文頭的處理過程如下a. 如果報文中含有"/r/n/r/n",則報文頭讀取完整,則進行下一步;b. 從緩衝中讀取報文;c. 如果當前字符為空格,貝ij將m-position和p-position之間的報文取出,將其保存在 解析結果中,最後將m-position修改為p-position並返回b);d. 如果m-position<= p-position,而且p-position<=f-position,重複進4亍b、 c操作'直到報文頭中的請求行解析完畢;e. 如果當前字符為"",則將m-position和p-position之間的報文取出,將其保存至 name中,同時將m-position修改為p-poshion並返回b;f. 如果當前字符為"/r/n",則將m-position和p-position之間的報文取出,將其保存至 value中,同時將(name,value)屬性對保存至header中,最後將m-position修改為p-position 並返回b;其中歩驟e和f所涉及的name為保存報文頭屬性名欄位的變量,value為保存報 文頭屬性值欄位的變量,而header為name和value的映射表;g. 重複執行b、 e、 f操作,直到當前字符的下一個位置為"/r/n"即報文頭解析完畢,修改解析進度標示HTTP報文處理程序判斷當前請求報文的處理進度,並調用與之相對應的報文處理方法。4、 報文體的處理方法如果當前報文的處理進度顯示還未處理報文體,則報文體的處理過程如下a. 初始化p-position為m-position;b. 如果f-position和p-position之間的報文片斷小於Content-length所指示的長度,則報文頭不完整,程序返回,否則進行下一步;c. 將p-position和f-position之間的報文取出,保存至解析結果中,解析完畢,修改 解析進度標示。5、 解析完畢,將數據緩衝回收至數據緩衝池。即刪除busy鏈中的相應節點,並在free 鏈中的隊尾添加一個節點。因此,當下次有報文讀取,需要數據緩衝時,可直接從free鏈 中獲取,避免了多次從內存分配的系統開銷,同時也避免了內存回收的系統開銷。
權利要求
1、一種基於非阻塞機制的HTTP報文處理方法,其特徵在於前提是建立起基於非阻塞機制的HTTP伺服器的線程模型,該伺服器的線程模型包括四個組件,即select線程,負責偵聽各種非阻塞IO事件的發生並負責和客戶端建立連接;線程池,它由多個工作線程組成,每個工作線程包含有一個事件隊列,每一個事件隊列存放多種類型的事件即任務;連接——線程映射表,其key值為連接,其value值為線程,根據該映射表,使得一個連接的所有任務在一個線程中執行;數據緩衝池,是存放報文的數據結構,它由兩個數據緩衝鏈組成,其一為busy鏈,表示正在使用的數據緩衝的集合,其二為free鏈,表示已經存在但當時未被使用的緩衝集合。因此,數據緩衝池由多個數據緩衝組成,每一個數據緩衝在某一個時刻只保存一個連接的報文,當讀取分配數據緩衝的過程報文處理完畢,該緩衝池回收相應的數據緩衝,避免了下次再分配和銷毀的開銷;在此線程模型基礎上,一個數據報文的處理過程包括以下步驟(1)當讀事件觸發時,select線程獲取讀事件,由工作線程完成HTTP報文的讀取,並保存至緩衝中;(2)判斷該HTTP報文是否需要解析報文頭,是則轉步驟(3),否則轉步驟(4);(3)判斷該HTTP報文頭是否已經完整到達,是則解析報文頭,否則轉步驟(1);(4)判斷該HTTP報文體是否已經完整到達,是則解析報文體,否則轉步驟(1);(5)解析完畢,將數據緩衝回收至數據緩衝池。
2、 根據權利要求1所述的一種基於非阻塞機制的HTTP報文處理方法,其特徵在於所述 步驟(1)的數據緩衝的使用方法如下-a. 當一個連接的報文片斷第一次到達時,分配一個初始大小的數據緩衝,並初始化 m-position、 p-position禾口 f-position位置為0,其中m-position, p-position禾口 f-position分另'J記錄已經有效解析的位置、當前正在解析的位置和當前報文片斷的結束位置;b. 若當前緩衝足夠容納該報文片斷,將數據讀入數據緩衝中,附在從f-position開始的緩 衝區內,讀取完畢修改當前報文片斷的結束位置為f-positiomc. 若當前緩衝不夠容納該報文片斷,則分配另外一個數據糹愛衝形成緩衝鏈,以存放剩下的報文片斷,轉步驟b;d. 報文解析完畢,將數據緩衝鏈回收至數據緩衝池中。
3、 根據權利要求1所述的一種基於非阻塞機制的HTTP報文處理方法,其特徵在於所述步驟(3)中報文頭的處理過程如下a. 如果報文中含有"/r/n7r/n",則報文頭讀取完整,則進行下一步;b. 從緩衝中讀取報文;c. 如果當前字符為空格,則將m-position和p-position之間的報文取出,將其保存在解析 結果中,最後將m-position修改為p-position並返回b;其中m-position, p-position禾口' f-position分別記錄已經有效解析的位置、當前正在解析的位置和當前報文片斷的結束位置;d. 如果m-position<= p-position,而且p-position<=f-position,重複進行步驟b、c操作,直 到報文頭中的請求行解析完畢;e. 如果當前字符為"",則將m-position和p-position之間的報文取出,將其保存至name 中,同時將m-position修改為p-position並返回b;f. 如果當前字符為"/r/n",則將m-position和p-position之間的報文取出,將其保存至value 中,同時將name和value屬性對保存至header中,最後將m-position修改為p-position並返回b; 其中步驟e和f所涉及的name為保存報文頭屬性名欄位的變量,vakie為保存報文頭屬性值字 段的變量,而header為name和value的映射表;g. 重複執行b、 e、 f操作,直到當前字符的下一個位置為"/r/n"即報文頭解析完畢,修改 解析進度標示。
4、根據權利要求1所述的一種基於非阻塞機制的HTTP報文處理方法,其特徵在於所述 步驟(4)中報文體的處理過程如下a. 初始化p-position為m-position;b. 如果f-position和p-position之間的報文片斷小於Content-length (HTTP協議中指示報 文體長度的報文頭屬性)所指示的長度,則報文頭不完整,則返回,否則進行下一步;c. 將p-position和f-position之間的報文取出,保存至解析結果中,解析完畢,修改解析 進度標示。
全文摘要
一種基於非阻塞機制的HTTP報文處理方法,包括以下步驟A)當讀事件觸發,讀取HTTP報文,將其存放於數據緩衝中;B)判斷該報文是否需要解析報文頭,是則轉C),否則轉D);C)判斷報文頭是否已經完整到達,是則解析報文頭,否則轉A);D)判斷報文體是否已經完整到達,是則解析報文體,否則轉A);E)解析完畢,將數據緩衝回收至數據緩衝池。本發明糅合了多線程和事件驅動兩者的優點,在HTTP報文的處理過程中,實現了真正的非阻塞機制,使得HTTP報文在解析過程中達到零拷貝和一次遍歷,大大的提高了HTTP報文的處理效率。
文檔編號H04L12/56GK101282300SQ20081010124
公開日2008年10月8日 申請日期2008年3月3日 優先權日2008年3月3日
發明者建 劉, 張德才, 李竹青, 霍遠國, 軍 韓, 馬殿富 申請人:北京航空航天大學

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀