一種面向cgi服務(wù)的通訊方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)交互技術(shù),具體涉及一種面向CGI服務(wù)的通訊方法。
【背景技術(shù)】
[0002]HTML是編制網(wǎng)頁的基本語言,但是它只能用于靜態(tài)的網(wǎng)頁,要實(shí)現(xiàn)動(dòng)態(tài)的網(wǎng)頁編程技術(shù),目前主要的動(dòng)態(tài)實(shí)現(xiàn)技術(shù):ASP,PHP, JSP, CGI等技術(shù)。為解決web服務(wù)器和用戶之間的交互性,用公用網(wǎng)關(guān)接口技術(shù)CGI完成動(dòng)態(tài)網(wǎng)頁的制作,由web瀏覽器提交搜索引擎頁面的查詢語句給web服務(wù)器后,web服務(wù)器調(diào)用搜索引擎程序,把檢索到相關(guān)結(jié)果再回傳給web服務(wù)器和web瀏覽器,通過CGI技術(shù)成功實(shí)現(xiàn)了瀏覽器和可執(zhí)行程序之間的動(dòng)態(tài)交互性,達(dá)到用戶快速獲得查詢信息的目標(biāo)。
[0003]epoll是Linux下多路復(fù)用1接口 select/poll的增強(qiáng)版本,它能顯著提高程序在大量并發(fā)連接中只有少量活躍的情況下的系統(tǒng)CPU利用率,因?yàn)樗鼤?huì)復(fù)用文件描述符集合來傳遞結(jié)果而不用迫使開發(fā)者每次等待事件之前都必須重新準(zhǔn)備要被偵聽的文件描述符集合。另一原因就是獲取事件的時(shí)候,它無須遍歷整個(gè)被偵聽的描述符集,只要遍歷那些被內(nèi)核1事件異步喚醒而加入Ready隊(duì)列的描述符集合即可??梢苑浅8咝У奶幚頂?shù)以百萬計(jì)的socket句柄,比起以前的select和poll效率高出很多。
[0004]大部分web后端程序目前都是用腳本語言寫的,需要解釋器解釋執(zhí)行,效率較低,實(shí)施時(shí)采用的是單進(jìn)程、阻塞1的方式,性能不夠高,并且頻繁使用內(nèi)存會(huì)造成大量的內(nèi)存碎片并進(jìn)而降低性能,容易造成內(nèi)存泄露。
【發(fā)明內(nèi)容】
[0005]為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種面向CGI服務(wù)的通訊方法,用戶通過web瀏覽器向服務(wù)器提出請求,服務(wù)器系統(tǒng)基于epoll異步模型,對其查詢請求進(jìn)行分析,然后到索引數(shù)據(jù)庫中檢索與之相關(guān)的文檔信息內(nèi)容,最后將檢索結(jié)果由CGI程序創(chuàng)建網(wǎng)頁展示給用戶。
[0006]為了實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采取如下技術(shù)方案:
[0007]一種面向CGI服務(wù)的通訊方法,所述方法包括如下步驟:
[0008](I)用戶通過web瀏覽器向服務(wù)器提出請求,CGI程序?qū)⒂脩粽埱筠D(zhuǎn)化為URL編碼;
[0009](2)服務(wù)器解析URL編碼并獲取內(nèi)存,基于印oil異步模型對請求進(jìn)行操作,并到索引數(shù)據(jù)庫中檢索相關(guān)的文檔信息內(nèi)容;
[0010](3)將檢索結(jié)果由CGI程序創(chuàng)建HTML頁面展示給用戶。
[0011]本發(fā)明提供的優(yōu)選技術(shù)方案中,所述步驟(2)包括如下步驟:
[0012]A、初始化內(nèi)存池,讀入配置文件;
[0013]B、接收并解析URL編碼,從內(nèi)存池獲取可用內(nèi)存,將URL解碼后的數(shù)據(jù)保存在內(nèi)存中,根據(jù)接收的內(nèi)容鏈接服務(wù)器;
[0014]C、初始化印oil模型,將請求數(shù)據(jù)和服務(wù)器鏈接指針地址寫到印oil中;
[0015]D、調(diào)用epoll_Wait之前檢測用戶請求是否超時(shí),若超時(shí)則返回超時(shí)信息給用戶,終止執(zhí)行以下操作;否則將epoll_wait輪詢到的數(shù)據(jù)指針壓入處理隊(duì)列等待處理;
[0016]E、根據(jù)隊(duì)列中請求數(shù)據(jù)的數(shù)據(jù)狀態(tài),將用戶請求轉(zhuǎn)發(fā)給索引后臺(tái)程序,當(dāng)從索引后臺(tái)程序返回完整的信息后,對信息進(jìn)行解析并返回給用戶。
[0017]本發(fā)明提供的第二優(yōu)選技術(shù)方案中,所述URL編碼以name = value的形式進(jìn)行編石馬,格式為 “name I = valuel&name2 = value2&name3 = value3 …”。
[0018]本發(fā)明提供的第三優(yōu)選技術(shù)方案中,解析URL編碼的方法步驟如下:
[0019](a)數(shù)據(jù)流中找到字符“ = ”,標(biāo)志著一個(gè)表單變量名的結(jié)束;
[0020](b)數(shù)據(jù)流中找到字符“&”,標(biāo)志著一個(gè)表單變量值的結(jié)束;
[0021](c)數(shù)據(jù)流中將字符“ + ”轉(zhuǎn)化為空格;
[0022](d)數(shù)據(jù)流中將“ % XX% XX”格式的轉(zhuǎn)化為漢字。
[0023]本發(fā)明提供的第四優(yōu)選技術(shù)方案中,步驟E中所述數(shù)據(jù)狀態(tài)包括連接、收取和發(fā)送。
[0024]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:
[0025]本發(fā)明采用epoll機(jī)制作為網(wǎng)絡(luò)通訊模型,使用效率高,提高了 web服務(wù)器和用戶之間的交互性,采用內(nèi)存池技術(shù),減少了內(nèi)存碎片,較大地提高了內(nèi)存使用性能,顯著降低了內(nèi)存的泄露。
【附圖說明】
[0026]圖1是一種面向CGI通訊方法的原理圖
[0027]圖2是一種面向CGI通訊方法的流程圖
【具體實(shí)施方式】
[0028]下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
[0029]如圖1所示,面向CGI服務(wù)的通訊方法,該方法步驟如下:
[0030](I)用戶通過web瀏覽器鏈接web服務(wù)器提出請求,CGI程序?qū)⒂脩粽埱蟊韱无D(zhuǎn)化為URL編碼;
[0031 ] (2) CGI代理模塊解析URL編碼并獲取內(nèi)存,基于印ol I異步模型對請求進(jìn)行操作,將信息發(fā)送給索引后臺(tái),進(jìn)行檢索相關(guān)的文檔信息內(nèi)容;
[0032](3)將檢索結(jié)果由CGI程序動(dòng)態(tài)創(chuàng)建HTML頁面,并返回到web瀏覽器上。
[0033]如圖2所示,CGI代理模塊具體工作流程如下:
[0034]A、初始化內(nèi)存池,讀入配置文件;
[0035]B、接收并解析URL編碼,從內(nèi)存池獲取可用內(nèi)存,將URL解碼后的數(shù)據(jù)保存在內(nèi)存中,根據(jù)接收的內(nèi)容鏈接服務(wù)器;
[0036]C、初始化印oil模型,將請求數(shù)據(jù)和服務(wù)器鏈接指針地址寫到印oil中;
[0037]D、調(diào)用epoll_wait之前檢測用戶請求是否超時(shí),若超時(shí)則返回超時(shí)信息給用戶,終止執(zhí)行以下操作;否則將epoll_wait輪詢到的數(shù)據(jù)指針壓入處理隊(duì)列等待處理;
[0038]E、根據(jù)隊(duì)列中請求數(shù)據(jù)的數(shù)據(jù)狀態(tài),將用戶請求轉(zhuǎn)發(fā)給索引后臺(tái)程序,當(dāng)從索引后臺(tái)程序返回完整的信息后,對信息進(jìn)行解析并返回給用戶。
[0039]URL 編碼以 name = value 的形式進(jìn)行編碼,格式為 “namel = valuel&name2 =value2&name3 = value3...,,。
[0040]解析URL編碼的方法步驟如下:
[0041](a)數(shù)據(jù)流中找到字符“ = ”,標(biāo)志著一個(gè)表單變量名的結(jié)束;
[0042](b)數(shù)據(jù)流中找到字符“&”,標(biāo)志著一個(gè)表單變量值的結(jié)束;
[0043](c)數(shù)據(jù)流中將字符“ + ”轉(zhuǎn)化為空格;
[0044](d)數(shù)據(jù)流中將“ % XX% XX”格式的轉(zhuǎn)化為漢字。
[0045]步驟E中所述數(shù)據(jù)狀態(tài)包括連接、收取和發(fā)送。
[0046]最后應(yīng)當(dāng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非對其限制,盡管參照上述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,所屬領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:依然可以對本發(fā)明的【具體實(shí)施方式】進(jìn)行修改或者等同替換,而未脫離本發(fā)明精神和范圍的任何修改或者等同替換,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
【主權(quán)項(xiàng)】
1.一種面向CGI服務(wù)的通訊方法,其特征在于,所述方法包括如下步驟: (1)CGI程序?qū)⒂脩敉ㄟ^web瀏覽器向服務(wù)器提出的請求轉(zhuǎn)化為URL編碼; (2)服務(wù)器解析URL編碼并放入內(nèi)存,基于epoll異步模型對請求進(jìn)行操作,并到索引數(shù)據(jù)庫中檢索相關(guān)的文檔信息內(nèi)容; (3)CGI程序?qū)z索結(jié)果創(chuàng)建HTML頁面向用戶展示。
2.根據(jù)權(quán)利要求1所述的面向CGI服務(wù)的通訊方法,其特征在于,所述步驟(2)包括如下步驟: A、初始化內(nèi)存池,讀入配置文件; B、接收并解析URL編碼,從內(nèi)存池獲取可用內(nèi)存,將URL解碼后的數(shù)據(jù)保存在內(nèi)存中,根據(jù)接收的內(nèi)容鏈接服務(wù)器; C、初始化epoll模型,將請求數(shù)據(jù)和服務(wù)器鏈接指針地址寫到印oil中; D、調(diào)用epoll_Wait之前檢測用戶請求是否超時(shí),若超時(shí)則返回超時(shí)信息給用戶,終止執(zhí)行以下操作;否則將epoll_wait輪詢到的數(shù)據(jù)指針壓入處理隊(duì)列等待處理; E、根據(jù)隊(duì)列中請求數(shù)據(jù)的數(shù)據(jù)狀態(tài),將用戶請求轉(zhuǎn)發(fā)給索引后臺(tái)程序,當(dāng)從索引后臺(tái)程序返回完整的信息后,對信息進(jìn)行解析并返回給用戶。
3.根據(jù)權(quán)利要求1所述的面向CGI服務(wù)的通訊方法,其特征在于,所述URL編碼以name=value 的形式進(jìn)行編碼,格式為“namel = valuel&name2 = value2&name3 = value3…”。
4.根據(jù)權(quán)利要求2所述的面向CGI服務(wù)的通訊方法,其特征在于,解析URL編碼的方法步驟如下: (a)數(shù)據(jù)流中找到字符“= ”,標(biāo)志著一個(gè)表單變量名的結(jié)束; (b)數(shù)據(jù)流中找到字符“&”,標(biāo)志著一個(gè)表單變量值的結(jié)束; (c)數(shù)據(jù)流中將字符“+ ”轉(zhuǎn)化為空格; (d)數(shù)據(jù)流中將“% XX% XX”格式的轉(zhuǎn)化為漢字。
5.根據(jù)權(quán)利要求2所述的面向CGI服務(wù)的通訊方法,其特征在于,步驟E中所述數(shù)據(jù)狀態(tài)包括連接、收取和發(fā)送。
【專利摘要】本發(fā)明提供一種面向CGI服務(wù)的通訊方法,用戶通過web瀏覽器向服務(wù)器提出請求,CGI程序?qū)⒂脩粽埱筠D(zhuǎn)化為URL編碼,服務(wù)器解析URL編碼并放入內(nèi)存,基于epoll異步模型對請求進(jìn)行操作,并到索引數(shù)據(jù)庫中檢索相關(guān)的文檔信息內(nèi)容,將檢索結(jié)果由CGI程序創(chuàng)建HTML頁面展示給用戶。提高了web服務(wù)器和用戶之間的交互性,采用內(nèi)存池技術(shù),減少了內(nèi)存碎片,提高了內(nèi)存的使用性能。
【IPC分類】G06F9-44, G06F17-30
【公開號】CN104657135
【申請?zhí)枴緾N201510058580
【發(fā)明人】趙軍
【申請人】北京中搜網(wǎng)絡(luò)技術(shù)股份有限公司
【公開日】2015年5月27日
【申請日】2015年2月4日