移動終端http請求聚合壓縮的系統(tǒng)及方法
【專利摘要】本發(fā)明公開了一種移動終端http請求聚合壓縮的系統(tǒng)及方法,屬于計算機網(wǎng)絡(luò)通信【技術(shù)領(lǐng)域】,包括Servlet模塊,HTTP請求聚合模塊,數(shù)據(jù)壓縮模塊,套接字通信模塊。本發(fā)明的有益效果如下:本發(fā)明在代理服務(wù)器處實現(xiàn)了HTTP請求的聚合壓縮,能達到使代理服務(wù)器與后臺服務(wù)器間只進行一次套接字通信就能處理多個移動終端的HTTP請求。對于那些代理服務(wù)器與后臺服務(wù)器間通信套接字數(shù)量有限,且有大量終端請求并發(fā)的場合,本發(fā)明可以利用少量套接字處理大量移動終端HTTP請求,能顯著減小代理服務(wù)器與后臺服務(wù)器間的通信數(shù)據(jù)量,降低服務(wù)器對終端請求的響應(yīng)延遲。
【專利說明】移動終端HTTP請求聚合壓縮的系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機網(wǎng)絡(luò)通信【技術(shù)領(lǐng)域】,尤其涉及一種移動終端HTTP請求聚合壓縮的系統(tǒng)及方法。
【背景技術(shù)】
[0002]隨著移動通信技術(shù)的迅猛發(fā)展,移動終端得到了廣泛的普及。越來越多的業(yè)務(wù)從PC (Personal computer,個人電腦)轉(zhuǎn)移到了移動終端,移動終端與后臺服務(wù)器的通信多采用HTTP (Hyper Text Transfer Protocol,超文本傳輸協(xié)議)請求的方式實現(xiàn)。許多業(yè)務(wù)可能針對PC端已有比較成熟的后臺服務(wù)器端,若針對移動終端再去設(shè)計相應(yīng)的服務(wù)器顯然代價太大,為充分利用已有的后臺服務(wù)器,通常使用代理服務(wù)器的方式實現(xiàn):移動終端發(fā)送HTTP請求到代理服務(wù)器,代理服務(wù)器解析、處理移動終端HTTP請求,并通過套接字(socket)與后臺服務(wù)器進行交互,最后再由代理服務(wù)器將響應(yīng)結(jié)果封裝并返回移動終端。
[0003]HTTP請求的URL (Uniform Resource Locator,統(tǒng)一資源定位符)解析后格式如下所示:
[0004]〈request-line〉
[0005]〈headers〉
[0006]〈blank line〉
[0007][<request-body>]
[0008]在HTTP請求中,第一行必須是一個請求行(request-line),用來說明請求的方式(通常為HTTP GET或HTTP POST)、要訪問的資源以及使用的HTTP版本。緊接著是一個首部(header)小節(jié),用來說明服務(wù)器要使用的附加信息。在首部之后是一個空行(blank line),再此之后可以添加任意的其他數(shù)據(jù),即請求主體(request-body)。
[0009]對于一個HTTP GET請求:
[0010]www.abed, com:8080/project/search?namel=valuel&name2=value2 ;
[0011]其對應(yīng)的請求行〈request-line〉是:
[0012]GET/project/search?namel=valuel&name2=value2HTTP/l.1 ;
[0013]對于一個HTTP POST 請求:
[0014]www.abed, com: 8080/pro ject/search ;
[0015]其對應(yīng)的請求行〈request-line〉是:GET/project/searchHTTP/1.1 ;
[0016]對應(yīng)的請求主體〈request-body〉是:namel=valuel&name2=value2;
[0017]以上HTTP 請求的請求路徑(request-path)均是:/project/search ;
[0018]請求參數(shù)是:namel=valuel&name2=value2。
[0019]當代理服務(wù)器與后臺服務(wù)器釆用套接字方式進行交互,若套接字一次只轉(zhuǎn)發(fā)一個移動終端的HTTP請求,則當大量終端請求到來時,必然會導致后續(xù)的HTTP請求無法得到及時的響應(yīng),造成不良的終端用戶體驗。
[0020]JS0N: JavaScript Object Notation,JavaScript 對象表不法。
【發(fā)明內(nèi)容】
[0021]本發(fā)明的目的在于解決HTTP請求無法得到及時的響應(yīng),造成不良的終端用戶體驗而提出的一種移動終端HTTP請求聚合壓縮的系統(tǒng)及方法。
[0022]為了實現(xiàn)以上發(fā)明目的,本發(fā)明采取的技術(shù)方案如下:一種移動終端HTTP請求聚合壓縮的系統(tǒng),包括包括Servlet模塊,HTTP請求聚合模塊,數(shù)據(jù)壓縮模塊,套接字通信模塊;
[0023]其中,
[0024]Servlet模塊用于接收從移動終端發(fā)送的HTTP請求并返回HTTP響應(yīng);
[0025]HTTP請求聚合模塊:包括原始請求隊列、聚合請求和聚合響應(yīng)數(shù)組;原始請求隊列用于存放所有移動終端的HTTP請求;聚合請求用于將所有移動終端HTTP請求進行聚合,其格式為JSON數(shù)組格式;聚合響應(yīng)數(shù)組是后臺服務(wù)器對聚合請求的響應(yīng)結(jié)果,其格式為JSON數(shù)組格式;
[0026]數(shù)據(jù)壓縮模塊用于判斷聚合請求或聚合響應(yīng)數(shù)組是否超過限定大小,若超過則對其進行壓縮;
[0027]套接字通信模塊用于處理代理服務(wù)器與后臺服務(wù)器間的通信。
[0028]作為優(yōu)選=Servlet模塊具體用于接收來自移動終端HTTP請求,為每個HTTP請求分配一個唯一的標簽并將其存入HTTP請求聚合模塊的原始請求隊列,同時將該HTTP請求對應(yīng)的線程掛起,直至響應(yīng)到來時再被喚醒。
[0029]作為優(yōu)選:HTTP請求聚合模塊具體用于判斷原始請求隊列是否為空:若為空,則經(jīng)過一個預設(shè)的超時時間I1ME0UT后繼續(xù)執(zhí)行下一步;若不為空且隊列元素個數(shù)大于等于一次性最多聚合的HTTP請求個數(shù)MAXNUM,則記錄下本次待處理請求個數(shù)為MAXNUM,否則如實記錄隊列元素個數(shù)。
[0030]作為優(yōu)選:數(shù)據(jù)壓縮模塊具體用于判斷聚合請求大小是否超過預定義的門限值MAXSIZE1,若超過則對聚合請求使用壓縮算法進行壓縮,并為該聚合請求添加一個壓縮標簽。
[0031]為解決以上問題,本發(fā)明還公開了一種方法,包括以下步驟:
[0032]S1:代理服務(wù)器初始化HTTP請求聚合模塊,套接字通信模塊;SerVlet模塊接收來自移動終端HTTP請求,為每個HTTP請求分配一個唯一的標簽并將其存入HTTP請求聚合模塊的原始請求隊列,同時將該HTTP請求對應(yīng)的線程掛起,直至響應(yīng)到來時再被喚醒;
[0033]S2:HTTP請求聚合模塊判斷原始請求隊列是否為空:若為空,則經(jīng)過一個預設(shè)的超時時間I1ME0UT后繼續(xù)執(zhí)行S3 ;若不為空且隊列元素個數(shù)大于等于一次性最多聚合的HTTP請求個數(shù)MAXNUM,則記錄下本次待處理請求個數(shù)為MAXNUM,否則如實記錄隊列元素個數(shù);
[0034]S3:從HTTP請求聚合模塊對應(yīng)的原始請求隊列中從隊首開始遍歷所有待處理的HTTP請求,將這些HTTP請求聚合成一個JSON數(shù)組格式的聚合請求;
[0035]S4:數(shù)據(jù)壓縮模塊判斷聚合請求大小是否超過預定義的門限值MAXSIZE1,若超過則對聚合請求使用壓縮算法進行壓縮,并為該聚合請求添加一個壓縮標簽;
[0036]S5:代理服務(wù)器的套接字通信模塊將聚合請求發(fā)送到后臺服務(wù)器;[0037]S6:后臺服務(wù)器首先判斷是否存在壓縮標簽,若存在則先解壓縮,否則直接解析聚合請求,后臺服務(wù)器解壓縮或者解析聚合請求后,得到所有請求映射對象;后臺服務(wù)器響應(yīng)每個請求映射對象內(nèi)的操作,最后將響應(yīng)結(jié)果存入聚合響應(yīng),壓縮并添加壓縮標簽后返回給代理服務(wù)器;
[0038]S7:代理服務(wù)器首先判斷是否存在壓縮標簽,若存在則先解壓縮,否則直接解析聚合響應(yīng),代理服務(wù)器解壓縮或者解析聚合響應(yīng)后,得到所有響應(yīng)映射對象;對每個響應(yīng)映射對象,根據(jù)其中的標簽鍵值對來喚醒原始請求隊列中對應(yīng)的HTTP請求線程,并將響應(yīng)映射對象內(nèi)的響應(yīng)鍵值對作為該HTTP請求的響應(yīng)返回給移動終端;
[0039]S8:代理服務(wù)器將已處理的HTTP請求出隊,并返回S2繼續(xù)執(zhí)行。
[0040]作為優(yōu)選:所述S3的聚合方法如下:
[0041]S31:為聚合請求創(chuàng)建一個空的JSON數(shù)組;
[0042]S32:新創(chuàng)建一個請求映射對象,對于原始請求隊列中的一個HTTP請求,進行如下處理:
[0043]S321:獲取該HTTP請求的標簽,并將該標簽作為請求映射對象中TAG鍵的值;
[0044]S322:將該HTTP請求的請求路徑解析成對應(yīng)的操作,并將該操作作為請求映射對象中Action鍵的值;
[0045]S323:若該請求為HTTP GET請求,則從請求行中取出該請求的參數(shù),并將這些參數(shù)鍵值對作為請求映射對象的鍵值對;若該請求為HTTP POST請求,則從請求主體中取出該請求的參數(shù),并將這些參數(shù)鍵值對作為請求映射對象的鍵值對;
[0046]S324:將該請求映射對象作為一個元素添加到聚合請求數(shù)組;
[0047]S325:循環(huán)執(zhí)行S32,直到處理完所有待處理的HTTP請求。
[0048]作為優(yōu)選:所述S6具體處理方式如下:
[0049]S61:為聚合響應(yīng)創(chuàng)建一個空的JSON數(shù)組;
[0050]S62:新創(chuàng)建一個響應(yīng)映射對象,對收到的請求映射對象做如下處理:
[0051]S621:對于一個請求映射對象,取出其中的TAG鍵值對并將其作為該響應(yīng)映射對象的TAG鍵值對;
[0052]S622:通過鍵值映射取出請求映射對象內(nèi)的操作及參數(shù),執(zhí)行后將響應(yīng)結(jié)果存入響應(yīng)映射對象;
[0053]S623:將響應(yīng)映射對象作為一個元素添加到聚合響應(yīng)數(shù)組,繼續(xù)執(zhí)行S62,直到處理完所有請求映射對象;
[0054]S63:后臺服務(wù)器判斷聚合響應(yīng)是否超過預定義的門限值MAXSIZE2,若超過則對聚合響應(yīng)使用壓縮算法進行壓縮;
[0055]S64:后臺服務(wù)器將聚合響應(yīng)通過套接字傳回給代理服務(wù)器。
[0056]作為優(yōu)選:S322所述對應(yīng)的操作為人機語言MML命令:SH0W_USER_INF0。
[0057]作為優(yōu)選:S4所述的壓縮算法為Huffman壓縮算法或者RLE壓縮算法。
[0058]作為優(yōu)選:S4所述的壓縮算法為LZW壓縮算法或者Rice壓縮算法。
[0059]本發(fā)明的有益效果:本發(fā)明在代理服務(wù)器處實現(xiàn)了 HTTP請求的聚合壓縮,能達到使代理服務(wù)器與后臺服務(wù)器間只進行一次套接字通信就能處理多個移動終端的HTTP請求。對于那些代理服務(wù)器與后臺服務(wù)器間通信套接字數(shù)量有限,且有大量終端請求并發(fā)的場合,本發(fā)明可以利用少量套接字處理大量移動終端HTTP請求,能顯著減小代理服務(wù)器與后臺服務(wù)器間的通信數(shù)據(jù)量,降低服務(wù)器對終端請求的響應(yīng)延遲。
【專利附圖】
【附圖說明】
[0060]圖1本發(fā)明所采用的整體框架示意圖;
[0061 ] 圖2本發(fā)明方法流程示意圖;
[0062]圖3 HTTP請求聚合方法示意圖;
[0063]圖4兩個套接字并發(fā)時HTTP請求聚合方法示意圖。
【具體實施方式】
[0064]為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明做進一步詳細說明。
[0065]一種移動終端HTTP請求聚合壓縮的系統(tǒng),包括包括Servlet模塊,HTTP請求聚合模塊,數(shù)據(jù)壓縮模塊,套接字通信模塊;
[0066]其中,
[0067]Servlet模塊用于接收從移動終端發(fā)送的HTTP請求并返回HTTP響應(yīng);
[0068]HTTP請求聚合模塊:包括原始請求隊列、聚合請求和聚合響應(yīng)數(shù)組;原始請求隊列用于存放所有移動終端的HTTP請求;聚合請求用于將所有移動終端HTTP請求進行聚合,其格式為JSON數(shù)組格式;聚合響應(yīng)數(shù)組是后臺服務(wù)器對聚合請求的響應(yīng)結(jié)果,其格式為JSON數(shù)組格式;
[0069]數(shù)據(jù)壓縮模塊用于判斷聚合請求或聚合響應(yīng)數(shù)組是否超過限定大小,若超過則對其進行壓縮;
[0070]套接字通信模塊用于處理代理服務(wù)器與后臺服務(wù)器間的通信。
[0071 ] Servlet模塊具體用于接收來自移動終端HTTP請求,為每個HTTP請求分配一個唯一的標簽并將其存入HTTP請求聚合模塊的原始請求隊列,同時將該HTTP請求對應(yīng)的線程掛起,直至響應(yīng)到來時再被喚醒。
[0072]HTTP請求聚合模塊具體用于判斷原始請求隊列是否為空:若為空,則經(jīng)過一個預設(shè)的超時時間I1ME0UT后繼續(xù)執(zhí)行下一步;若不為空且隊列元素個數(shù)大于等于一次性最多聚合的HTTP請求個數(shù)MAXNUM,則記錄下本次待處理請求個數(shù)為MAXNUM,否則如實記錄隊列元素個數(shù)。
[0073]數(shù)據(jù)壓縮模塊具體用于判斷聚合請求大小是否超過預定義的門限值MAXSIZE1,若超過則對聚合請求使用壓縮算法進行壓縮,并為該聚合請求添加一個壓縮標簽。
[0074]為解決以上問題,本發(fā)明還公開了一種方法,包括以下步驟:
[0075]S1:代理服務(wù)器初始化HTTP請求聚合模塊,套接字通信模塊;SerVlet模塊接收來自移動終端HTTP請求,為每個HTTP請求分配一個唯一的標簽并將其存入HTTP請求聚合模塊的原始請求隊列,同時將該HTTP請求對應(yīng)的線程掛起,直至響應(yīng)到來時再被喚醒;
[0076]S2:HTTP請求聚合模塊判斷原始請求隊列是否為空:若為空,則經(jīng)過一個預設(shè)的超時時間I1ME0UT后繼續(xù)執(zhí)行S3 ;若不為空且隊列元素個數(shù)大于等于一次性最多聚合的HTTP請求個數(shù)MAXNUM,則記錄下本次待處理請求個數(shù)為MAXNUM,否則如實記錄隊列元素個數(shù);
[0077]S3:從HTTP請求聚合模塊對應(yīng)的原始請求隊列中從隊首開始遍歷所有待處理的HTTP請求,將這些HTTP請求聚合成一個JSON數(shù)組格式的聚合請求;
[0078]S4:數(shù)據(jù)壓縮模塊判斷聚合請求大小是否超過預定義的門限值MAXSIZE1,若超過則對聚合請求使用壓縮算法進行壓縮,并為該聚合請求添加一個壓縮標簽;
[0079]S5:代理服務(wù)器的套接字通信模塊將聚合請求發(fā)送到后臺服務(wù)器;
[0080]S6:后臺服務(wù)器首先判斷是否存在壓縮標簽,若存在則先解壓縮,否則直接解析聚合請求,后臺服務(wù)器解壓縮或者解析聚合請求后,得到所有請求映射對象;后臺服務(wù)器響應(yīng)每個請求映射對象內(nèi)的操作,最后將響應(yīng)結(jié)果存入聚合響應(yīng),壓縮并添加壓縮標簽后返回給代理服務(wù)器;
[0081]S7:代理服務(wù)器首先判斷是否存在壓縮標簽,若存在則先解壓縮,否則直接解析聚合響應(yīng),代理服務(wù)器解壓縮或者解析聚合響應(yīng)后,得到所有響應(yīng)映射對象;對每個響應(yīng)映射對象,根據(jù)其中的標簽鍵值對來喚醒原始請求隊列中對應(yīng)的HTTP請求線程,并將響應(yīng)映射對象內(nèi)的響應(yīng)鍵值對作為該HTTP請求的響應(yīng)返回給移動終端;
[0082]S8:代理服務(wù)器將已處理的HTTP請求出隊,并返回S2繼續(xù)執(zhí)行。
[0083]所述S3的聚合方法如下:
[0084]S31:為聚合請求創(chuàng)建一個空的JSON數(shù)組;
[0085]S32:新創(chuàng)建一個請求映射對象,對于原始請求隊列中的一個HTTP請求,進行如下處理:
[0086]S321:獲取該HTTP請求的標簽,并將該標簽作為請求映射對象中TAG鍵的值;
[0087]S322:將該HTTP請求的請求路徑解析成對應(yīng)的操作,并將該操作作為請求映射對象中Action鍵的值;
[0088]S323:若該請求為HTTP GET請求,則從請求行中取出該請求的參數(shù),并將這些參數(shù)鍵值對作為請求映射對象的鍵值對;若該請求為HTTP POST請求,則從請求主體中取出該請求的參數(shù),并將這些參數(shù)鍵值對作為請求映射對象的鍵值對;
[0089]S324:將該請求映射對象作為一個元素添加到聚合請求數(shù)組;
[0090]S325:循環(huán)執(zhí)行S32,直到處理完所有待處理的HTTP請求。
[0091 ] 所述S6具體處理方式如下:
[0092]S61:為聚合響應(yīng)創(chuàng)建一個空的JSON數(shù)組;
[0093]S62:新創(chuàng)建一個響應(yīng)映射對象,對收到的請求映射對象做如下處理:
[0094]S621:對于一個請求映射對象,取出其中的TAG鍵值對并將其作為該響應(yīng)映射對象的TAG鍵值對;
[0095]S622:通過鍵值映射取出請求映射對象內(nèi)的操作及參數(shù),執(zhí)行后將響應(yīng)結(jié)果存入響應(yīng)映射對象;
[0096]S623:將響應(yīng)映射對象作為一個元素添加到聚合響應(yīng)數(shù)組,繼續(xù)執(zhí)行S62,直到處理完所有請求映射對象;
[0097]S63:后臺服務(wù)器判斷聚合響應(yīng)是否超過預定義的門限值MAXSIZE2,若超過則對聚合響應(yīng)使用壓縮算法進行壓縮;
[0098]S64:后臺服務(wù)器將聚合響應(yīng)通過套接字傳回給代理服務(wù)器。[0099]S322所述對應(yīng)的操作為人機語言MML命令:SH0W_USER_INF0。
[0100]S4所述的壓縮算法為Huffman壓縮算法或者RLE壓縮算法。
[0101]S4所述的壓縮算法為LZW壓縮算法或者Rice壓縮算法。
[0102]本發(fā)明所公開方法主要由四個模塊構(gòu)成:Servlet模塊,HTTP請求聚合模塊,數(shù)據(jù)壓縮模塊,套接字通信模塊。
[0103]Servlet模塊=Servlet的主要功能是接收從移動終端發(fā)送過來的HTTP請求,并返回HTTP響應(yīng),具體而言就是從請求對象獲得客戶端數(shù)據(jù)并向響應(yīng)對象創(chuàng)建輸出。
[0104]HTTP請求聚合模塊:包括原始請求隊列,聚合請求,聚合響應(yīng)數(shù)組;原始請求隊列:存放各移動終端的HTTP請求;聚合請求:將多個移動終端HTTP請求聚合后的請求,其格式為JSON數(shù)組格式;聚合響應(yīng)數(shù)組:后臺服務(wù)器對聚合請求的響應(yīng)結(jié)果,其格式為JSON數(shù)組格式。
[0105]數(shù)據(jù)壓縮模塊:判斷聚合請求或聚合響應(yīng)是否超過限定大小,若超過則對其進行壓縮。
[0106]套接字通信模塊:該模塊負責代理服務(wù)器與后臺服務(wù)器間的通信,使用原始套接字實現(xiàn)即兩臺主機之間進行網(wǎng)絡(luò)通信、傳輸數(shù)據(jù)的方式。
[0107]具體實施例一:
[0108]本發(fā)明所提出方法實施步驟如下,運行流程如圖2所示:
[0109]1.啟動時,代理服務(wù)器初始化HTTP請求聚合模塊,套接字通信模塊。Servlet模塊接收來自移動終端HTTP請求,為每個HTTP請求分配一個唯一的標簽并將其存入HTTP請求聚合模塊的原始請求隊列,同時將該HTTP請求對應(yīng)的線程掛起,直至響應(yīng)到來時再被喚醒。
[0110]2.HTTP請求聚合模塊檢查原始請求隊列是否為空:若為空,則經(jīng)過I1ME0UT (—個預設(shè)的超時時間)后繼續(xù)執(zhí)行步驟2 ;若不為空,則記錄下本次待處理HTTP請求個數(shù)為MAXNUM (一次性最多聚合的HTTP請求個數(shù))或隊列元素個數(shù)(當原始請求隊列長度小于MAXNUM)ο
[0111]3.從HTTP請求聚合模塊對應(yīng)的原始請求隊列中從隊首開始遍歷所有待處理HTTP請求,將這些HTTP請求聚合成一個JSON數(shù)組格式的聚合請求。具體的聚合方法見圖3,描述如下:
[0112]a)初始化:為聚合請求創(chuàng)建一個空的JSON數(shù)組。
[0113]b)新創(chuàng)建一個請求映射對象,對于原始請求隊列中的一個HTTP請求,進行如下處理:
[0114]1.獲取該HTTP請求的標簽,并將該標簽作為請求映射對象中TAG鍵的值。
[0115]i1.將該HTTP請求的請求路徑解析成對應(yīng)的操作(后臺服務(wù)器能理解并執(zhí)行該操作,該操作的定義由代理服務(wù)器與后臺服務(wù)器協(xié)商決定,如MML(Man-Machine Language人機語言)命令:SH0W_USER_INF0),將該操作作為請求映射對象中Action鍵的值。
[0116]ii1.若該請求為HTTP GET請求,則從請求行中取出該請求的參數(shù),并將這些參數(shù)鍵值對作為請求映射對象的鍵值對。
[0117]若該請求為HTTP POST請求,則從請求主體中取出該請求的參數(shù),并將這些參數(shù)鍵值對作為請求映射對象的鍵值對。[0118]iv.將該請求映射對象作為一個元素添加到聚合請求數(shù)組。
[0119]V.繼續(xù)執(zhí)行步驟b),直到處理完所有待處理HTTP請求。
[0120]4.壓縮模塊判斷聚合請求大小是否超過預定義的門限值MAXSIZE1,若超過則對聚合請求使用壓縮算法(例如Huffman壓縮算法、RLE壓縮算法、LZW壓縮算法、Rice壓縮算法等)進行壓縮,并為該聚合請求添加一個壓縮標簽,表明其經(jīng)過壓縮。
[0121]5.代理服務(wù)器的套接字通信模塊將聚合請求發(fā)送到后臺服務(wù)器。
[0122]6.后臺服務(wù)器收到來自代理服務(wù)器的聚合請求,首先判斷是否存在壓縮標簽,若存在則先解壓縮,否則直接解析聚合請求,得到所有請求映射對象。后臺服務(wù)器響應(yīng)每個請求映射對象內(nèi)的操作,并將響應(yīng)結(jié)果存入聚合響應(yīng),返回給代理服務(wù)器。具體處理方式如下:
[0123]a)初始化:為聚合響應(yīng)創(chuàng)建一個空的JSON數(shù)組。
[0124]b)新創(chuàng)建一個響應(yīng)映射對象,對收到的請求映射對象做如下處理:
[0125]1.對于一個請求映射對象,取出其中的TAG鍵值對并將其作為該響應(yīng)映射對象的TAG鍵值對。
[0126]i1.通過鍵值映射取出請求映射對象內(nèi)的操作及參數(shù),執(zhí)行后將響應(yīng)結(jié)果存入響應(yīng)映射對象。
[0127]ii1.將響應(yīng)映射對象作為一個元素添加到聚合響應(yīng)數(shù)組。繼續(xù)執(zhí)行步驟b),直到處理完所有請求映射對象。
[0128]c)后臺服務(wù)器判斷聚合響應(yīng)是否超過預定義的門限值MAXSIZE2,若超過則對聚合響應(yīng)使用壓縮算法進行壓縮,并為該聚合請求添加一個壓縮標簽,表明其經(jīng)過壓縮。
[0129]d)最后,后臺服務(wù)器將聚合響應(yīng)通過套接字傳回給代理服務(wù)器。
[0130]7.代理服務(wù)器首先判斷是否存在壓縮標簽,若存在則先解壓縮,否則直接解析聚合響應(yīng),得到所有響應(yīng)映射對象。對每個響應(yīng)映射對象,根據(jù)其中的標簽(TAG)鍵值對來喚醒原始請求隊列中對應(yīng)的HTTP請求線程,并將響應(yīng)映射對象內(nèi)的響應(yīng)鍵值對作為該HTTP請求的響應(yīng)返回給移動終端。
[0131]8.代理服務(wù)器將已處理的HTTP請求出隊,并返回步驟2繼續(xù)執(zhí)行。
[0132]以上所述方法適用于代理服務(wù)器與后臺服務(wù)器間使用單一套接字進行通信情形。當代理服務(wù)器與后臺服務(wù)器間可以使用多個套接字并發(fā)通信時,本發(fā)明將按如下方式處理,具體如圖4所示:
[0133]每個套接字均有一個與其對應(yīng)的HTTP請求聚合模塊和套接字通信模塊。Servlet模塊在接收到來自移動終端的HTTP請求時,按照一定的算法(如負載均衡法,即在分發(fā)時盡量保證各個HTTP請求聚合模塊所需處理的請求個數(shù)相近)將這些HTTP請求分發(fā)到各個HTTP請求聚合模塊的原始請求隊列中,剩下的步驟即和上述提出的本發(fā)明方法實施步驟一致。
[0134]以下將結(jié)合具體實例,對本發(fā)明方法進行說明。
[0135]具體實施例二:
[0136]本例展示了當有三個移動終端HTTP GET請求到達時,代理服務(wù)器如何聚合這些請求。
[0137]1.Servlet模塊接收來自移動終端的3個HTTP請求:[0138]http://192.168.0.3:8080/Application/login.action?name=u&pas s=p
[0139]http://192.168.0.3:8080/Application/show.action?mode=0&time=9
[0140]http://192.168.0.3:8080/Application/getDaylnf0.action?day=20131106
[0141]分別為以上三個請求分配標簽:0,1,2,而后將這些請求存入HTTP請
[0142]求聚合模塊的原始請求隊列,同時將這些HTTP請求對應(yīng)的線程掛起。
[0143]2.HTTP請求聚合模塊檢查原始請求隊列有3個HTTP請求,隨即記錄本次需處理的HTTP請求個數(shù)為3。
[0144]3.從HTTP請求聚合模塊對應(yīng)的原始請求隊列中從隊首開始遍歷3個HTTP請求,將這些HTTP請求聚合成一個JSON格式的聚合請求。具體聚合過程如下:
[0145]對于HTTP請求
[0146]http://192.168.0.3:8080/Application/login.action?name=u&pas s=p
[0147]可知其標簽為O,其請求路徑為/Application/login, action,其請
[0148]求參數(shù)為name=u&pass=p。于是可構(gòu)造請求映射對象1:[0149]{ “TAG”:0, “Action”:”LOGIN”,”name”:”U”,”pass”:”p”}。
[0150]同理可構(gòu)造出其余兩個,請求映射對象2:
[0151]{“TAG,,:1,“Action,,:,,SHOW,,,”mode”:,,O,,,” time”:,,9,,};請求映射對象
[0152]{ “TAG”:2, “Action”: ” GET_DAY_INF0”,” day”: ”20131106”}
[0153]最后將這三個請求映射對象依次放入聚合請求數(shù)組。
[0154]4.假設(shè)預定義的門限值MAXSIZE1=1M,壓縮模塊判斷聚合請求大小未超過MAXSIZE1,故不進行壓縮。
[0155]5.代理服務(wù)器的套接字通信模塊將聚合請求發(fā)送到后臺服務(wù)器。
[0156]6.后臺服務(wù)器解析聚合請求,得到3個JSON對象:請求映射對象1,請求映射對象2,請求映射對象3。后臺服務(wù)器響應(yīng)每個請求映射對象內(nèi)的操作,具體如下:
[0157]對于請求映射對象1:
[0158]{ "TAG":0, “Action”:”L0GIN”,”name”:”u”,”pass”:”p”},根據(jù)約定,后臺服務(wù)器獲取其TAG、“Action”中的操作”LOGIN”及操作參數(shù),執(zhí)行后將執(zhí)行結(jié)果存入響應(yīng)映射對象I。同理,執(zhí)行剩余兩個操作,得到響應(yīng)映射對象2,響應(yīng)映射對象3。隨后將上述響應(yīng)映射對象放入聚合響應(yīng)數(shù)組。假設(shè)預定義的門限值MAXSIZE2=2M,后臺服務(wù)器判斷聚合響應(yīng)大小超過MAXSIZE2,故對其采用Huffman壓縮算法進行壓縮,最后通過套接字將壓縮的聚合響應(yīng)傳回給代理服務(wù)器。
[0159]7.代理服務(wù)器解壓縮并解析聚合響應(yīng),得到3個JSON對象:響應(yīng)映射對象I,響應(yīng)映射對象2,響應(yīng)映射對象3。
[0160]代理服務(wù)器取出響應(yīng)映射對象1,根據(jù)其中的標簽值喚醒Servlet模塊中等待的對應(yīng)HTTP請求線程,設(shè)置其響應(yīng)對象為響應(yīng)映射對象I的響應(yīng)鍵值對,而后將該響應(yīng)返回給移動終端。
[0161]同理代理服務(wù)器處理完剩余的響應(yīng)JSON對象。
[0162]8.代理服務(wù)器將已處理的3個HTTP請求出隊,并返回步驟2繼續(xù)執(zhí)行。
[0163]本領(lǐng)域的普通技術(shù)人員將會意識到,這里所述的實施例是為了幫助讀者理解本發(fā)明的實施方法,應(yīng)被理解為本發(fā)明的保護范圍并不局限于這樣的特別陳述和實施例。本領(lǐng)域的普通技術(shù)人員可以根據(jù)本發(fā)明公開的這些技術(shù)啟示做出各種不脫離本發(fā)明實質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護范圍內(nèi)。
【權(quán)利要求】
1.一種將移動終端http請求聚合壓縮的系統(tǒng),其特征在于,包括Servlet模塊,HTTP請求聚合模塊,數(shù)據(jù)壓縮模塊,套接字通信模塊; 其中, Servlet模塊用于接收從移動終端發(fā)送的HTTP請求并返回HTTP響應(yīng); HTTP請求聚合模塊:包括原始請求隊列、聚合請求和聚合響應(yīng)數(shù)組;原始請求隊列用于存放所有移動終端的HTTP請求;聚合請求用于將所有移動終端HTTP請求進行聚合,其格式為JSON數(shù)組格式;聚合響應(yīng)數(shù)組是后臺服務(wù)器對聚合請求的響應(yīng)結(jié)果,其格式為JSON數(shù)組格式; 數(shù)據(jù)壓縮模塊用于判斷聚合請求或聚合響應(yīng)數(shù)組是否超過限定大小,若超過則對其進行壓縮; 套接字通信模塊用于處理代理服務(wù)器與后臺服務(wù)器間的通信。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,Servlet模塊具體用于接收來自移動終端HTTP請求,為每個HTTP請求分配一個唯一的標簽并將其存入HTTP請求聚合模塊的原始請求隊列,同時將該HTTP請求對應(yīng)的線程掛起,直至響應(yīng)到來時再被喚醒。
3.根據(jù)權(quán)利要求1或2所述的系統(tǒng),其特征在于,HTTP請求聚合模塊具體用于判斷原始請求隊列是否為空:若為空,則經(jīng)過一個預設(shè)的超時時間I1ME0UT后繼續(xù)執(zhí)行下一步;若不為空且隊列元素個數(shù)大于等于一次性最多聚合的HTTP請求個數(shù)MAXNUM,則記錄下本次待處理請求個數(shù)為MA XNUM,否則如實記錄隊列元素個數(shù)。
4.根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于,數(shù)據(jù)壓縮模塊具體用于判斷聚合請求大小是否超過預定義的門限值MAXSIZE1,若超過則對聚合請求使用壓縮算法進行壓縮,并為該聚合請求添加一個壓縮標簽。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,包括以下步驟: S1:代理服務(wù)器初始化HTTP請求聚合模塊,套接字通信模塊;SerVlet模塊接收來自移動終端HTTP請求,為每個HTTP請求分配一個唯一的標簽并將其存入HTTP請求聚合模塊的原始請求隊列,同時將該HTTP請求對應(yīng)的線程掛起,直至響應(yīng)到來時再被喚醒; S2:HTTP請求聚合模塊判斷原始請求隊列是否為空:若為空,則經(jīng)過一個預設(shè)的超時時間HME0UT后繼續(xù)執(zhí)行S3 ;若不為空且隊列元素個數(shù)大于等于一次性最多聚合的HTTP請求個數(shù)MAXNUM,則記錄下本次待處理請求個數(shù)為MAXNUM,否則如實記錄隊列元素個數(shù); S3:從HTTP請求聚合模塊對應(yīng)的原始請求隊列中從隊首開始遍歷所有待處理的HTTP請求,將這些HTTP請求聚合成一個JSON數(shù)組格式的聚合請求; S4:數(shù)據(jù)壓縮模塊判斷聚合請求大小是否超過預定義的門限值MAXSIZE1,若超過則對聚合請求使用壓縮算法進行壓縮,并為該聚合請求添加一個壓縮標簽; S5:代理服務(wù)器的套接字通信模塊將聚合請求發(fā)送到后臺服務(wù)器; S6:后臺服務(wù)器首先判斷是否存在壓縮標簽,若存在則先解壓縮,否則直接解析聚合請求,后臺服務(wù)器解壓縮或者解析聚合請求后,得到所有請求映射對象;后臺服務(wù)器響應(yīng)每個請求映射對象內(nèi)的操作,最后將響應(yīng)結(jié)果存入聚合響應(yīng),壓縮并添加壓縮標簽后返回給代理服務(wù)器; S7:代理服務(wù)器首先判斷是否存在壓縮標簽,若存在則先解壓縮,否則直接解析聚合響應(yīng),代理服務(wù)器解壓縮或者解析聚合響應(yīng)后,得到所有響應(yīng)映射對象;對每個響應(yīng)映射對象,根據(jù)其中的標簽鍵值對來喚醒原始請求隊列中對應(yīng)的HTTP請求線程,并將響應(yīng)映射對象內(nèi)的響應(yīng)鍵值對作為該HTTP請求的響應(yīng)返回給移動終端; S8:代理服務(wù)器將已處理的HTTP請求出隊,并返回S2繼續(xù)執(zhí)行。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述S3的聚合方法如下: S31:為聚合請求創(chuàng)建一個空的JSON數(shù)組; S 3 2:新創(chuàng)建一個請求映射對象,對于原始請求隊列中的一個HT T P請求,進行如下處理: 5321:獲取該HTTP請求的標簽,并將該標簽作為請求映射對象中TAG鍵的值; 5322:將該HTTP請求的請求路徑解析成對應(yīng)的操作,并將該操作作為請求映射對象中Action鍵的值; 5323:若該請求為HTTP GET請求,則從請求行中取出該請求的參數(shù),并將這些參數(shù)鍵值對作為請求映射對象的鍵值對;若該請求為HTTP POST請求,則從請求主體中取出該請求的參數(shù),并將這些參數(shù)鍵值對作為請求映射對象的鍵值對; 5324:將該請求映射對象作為一個元素添加到聚合請求數(shù)組; 5325:循環(huán)執(zhí)行S32,直到處理完所有待處理的HTTP請求。
7.根據(jù)權(quán)利要求5或者6所述的方法,其特征在于,所述S6具體處理方式如下: 561:為聚合響應(yīng)創(chuàng)建一個空的JSON數(shù)組; 562:新創(chuàng)建一個響應(yīng)映射對象,對收到的請求映射對象做如下處理: 5621:對于一個請求映射對象,取出其中的TAG鍵值對并將其作為該響應(yīng)映射對象的TAG鍵值對; 5622:通過鍵值映射取出請求映射對象內(nèi)的操作及參數(shù),執(zhí)行后將響應(yīng)結(jié)果存入響應(yīng)映射對象; 5623:將響應(yīng)映射對象作為一個元素添加到聚合響應(yīng)數(shù)組,繼續(xù)執(zhí)行S62,直到處理完所有請求映射對象; 563:后臺服務(wù)器判斷聚合響應(yīng)是否超過預定義的門限值MAXSIZE2,若超過則對聚合響應(yīng)使用壓縮算法進行壓縮; 564:后臺服務(wù)器將聚合響應(yīng)通過套接字傳回給代理服務(wù)器。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,S322所述對應(yīng)的操作為人機語言MML命令:SH0W_USER_INF0。
9.根據(jù)權(quán)利要求5所述的方法,其特征在于,S4所述的壓縮算法為Huffman壓縮算法或者RLE壓縮算法。
10.根據(jù)權(quán)利要求5所述的方法,其特征在于,S4所述的壓縮算法為LZW壓縮算法或者Rice壓縮算法。
【文檔編號】H04L29/08GK103747097SQ201410028872
【公開日】2014年4月23日 申請日期:2014年1月22日 優(yōu)先權(quán)日:2014年1月22日
【發(fā)明者】李龍江, 鄭靈杰 申請人:電子科技大學