朱 錦,雷娟娟,陳福才
(國(guó)家數(shù)字交換系統(tǒng)工程技術(shù)研究中心 河南 鄭州450000)
基于CGI的嵌入式W eb服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
朱 錦,雷娟娟,陳福才
(國(guó)家數(shù)字交換系統(tǒng)工程技術(shù)研究中心 河南 鄭州450000)
為了在資源有限的嵌入式設(shè)備上能夠有效地實(shí)現(xiàn)動(dòng)態(tài)Web,本文比較了幾種Web服務(wù)器的優(yōu)缺點(diǎn),選擇了性能優(yōu)異的Boa作為嵌入式Web服務(wù)器,闡述了CGI技術(shù)的相關(guān)原理以及SQLite數(shù)據(jù)庫的定義。本文所設(shè)計(jì)的查詢數(shù)據(jù)系統(tǒng)以嵌入式Linux操作系統(tǒng)為軟件平臺(tái),以PowerPC8548為硬件平臺(tái),利用HTML表單和CGI技術(shù)完成了對(duì)后端數(shù)據(jù)庫SQLite的數(shù)據(jù)信息查詢,實(shí)現(xiàn)Web客戶端與Web服務(wù)器的動(dòng)態(tài)交互。
嵌入式Web服務(wù)器;Boa;CGI;SQLite
隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展和嵌入式Web應(yīng)用越來越廣泛,需要接入Internet網(wǎng)的信息化產(chǎn)品越來越多。在嵌入式系統(tǒng)中可以通過Web頁面進(jìn)行遠(yuǎn)程訪問和控制,查看或修改遠(yuǎn)程設(shè)備的數(shù)據(jù)信息。為了滿足嵌入式設(shè)備接入互聯(lián)網(wǎng)的需求以及實(shí)現(xiàn)嵌入式Web服務(wù)器與Web頁面的動(dòng)態(tài)交互[1],很多系統(tǒng)引入了CGI技術(shù)[2]。
CGI是實(shí)現(xiàn)動(dòng)態(tài)Web的基礎(chǔ)。文中對(duì)嵌入式Web服務(wù)器Boa以及CGI技術(shù)的相關(guān)原理進(jìn)行了研究,利用CGI技術(shù)實(shí)現(xiàn)Boa服務(wù)器和Web頁面的動(dòng)態(tài)交互,實(shí)驗(yàn)結(jié)果成功證明了其可行性。
嵌入式Web服務(wù)器(Embedded Web Server,EWS)指的是在現(xiàn)場(chǎng)測(cè)試和控制設(shè)備中嵌入的Web服務(wù)器。EWS是以TCP/IP協(xié)議棧為基礎(chǔ)進(jìn)行設(shè)計(jì)的,在此基礎(chǔ)上要構(gòu)建HTTP、TCP以及UDP等協(xié)議。由于嵌入式設(shè)備的處理器能力有限,存儲(chǔ)容量也小得多,傳統(tǒng)的Web服務(wù)器很難運(yùn)行在嵌入式設(shè)備上,必須考慮使用體積更小、功能相對(duì)簡(jiǎn)單、消耗資源更少的簡(jiǎn)單Web服務(wù)器來解決這一問題,嵌入式Web服務(wù)器便應(yīng)運(yùn)而生。
衡量嵌入式Web服務(wù)器的性能取決于以下幾個(gè)方面[3]:1)可移植性,即能方便地在多種目標(biāo)平臺(tái)上進(jìn)行移植;2)可裁減性,使用戶可以根據(jù)實(shí)際需求,裁減掉那些冗余的功能,降低嵌入式Web服務(wù)器對(duì)資源的需求;3)可交互性,即服務(wù)器與目標(biāo)系統(tǒng)間的交互性越好,說明它的使用越方便,對(duì)目標(biāo)系統(tǒng)的控制越靈活。
常見的嵌入式Web服務(wù)器有httpd、apache、goAhead和Boa等。httpd是最簡(jiǎn)單的一種Web服務(wù)器,它的功能最弱,不支持認(rèn)證,不支持CGI,僅能提供一些靜態(tài)頁面;apache是重量級(jí)服務(wù)器,成熟穩(wěn)定,但體積較大,適合復(fù)雜的嵌入式應(yīng)用,在高負(fù)載的情況下,沒有單進(jìn)程的服務(wù)器性能高;goAhead和Boa都支持CGI,但是goAhead是個(gè)比較專用的Web服務(wù)器,大部分功能都在服務(wù)它自己提供的goform功能和ASP功能,而Boa是一個(gè)非常小巧且高效的嵌入式服務(wù)器,開放源代碼,可執(zhí)行代碼大約只有60 kB,它運(yùn)行在Linux或Unix下,支持CGI和HTTP,響應(yīng)請(qǐng)求的速度快,最多可以同時(shí)響應(yīng)50個(gè)請(qǐng)求。Boa的設(shè)計(jì)目標(biāo)是速度和安全,非常適合于嵌入式系統(tǒng)。為了實(shí)現(xiàn)動(dòng)態(tài)Web技術(shù),本文也正是采用了Boa。
2.1CGI工作原理
用戶通過Web瀏覽器進(jìn)行URL訪問,形成的HTTP請(qǐng)求通過瀏覽器發(fā)送到Web服務(wù)器,Web服務(wù)器守護(hù)進(jìn)程接收到該請(qǐng)求后會(huì)創(chuàng)建一個(gè)CGI的子進(jìn)程,該子進(jìn)程將CGI請(qǐng)求的有關(guān)數(shù)據(jù)設(shè)置成環(huán)境變量,然后根據(jù)鏈接啟動(dòng)指定的CGI處理程序從環(huán)境變量中讀取數(shù)據(jù),經(jīng)過處理后,最后使用STDOUT輸出HTML形式的結(jié)果文件,經(jīng)Web服務(wù)器送回瀏覽器顯示給用戶。
2.2CGI的傳送數(shù)據(jù)方式
CGI傳送方式[4]是使用HTML表單向Web服務(wù)器發(fā)送信息。基本語法如下:
其中method屬性定義了程序如何將數(shù)據(jù)傳送到Web服務(wù)器,傳送方式有兩種:
1)GET方法
使用GET方法時(shí),表單數(shù)據(jù)會(huì)附加在所指向CGI腳本的URL后一起發(fā)送給Web服務(wù)器,Web服務(wù)器將收到的表單數(shù)據(jù)賦予環(huán)境變量QUERY-STRING,CGI程序?qū)⒁宰址男问綇沫h(huán)境變量QUERY_STRING中獲取數(shù)據(jù)。
2)POST方法
POST方法通過使用標(biāo)準(zhǔn)輸入(STDIN)將表單數(shù)據(jù)傳送給Web服務(wù)器。將數(shù)據(jù)的長(zhǎng)度存放在環(huán)境變量CONTENT_ LENGTH中,CGI程序先從CONTENT_LENGTH中讀出數(shù)據(jù)的長(zhǎng)度,然后再從標(biāo)準(zhǔn)輸入STDIN中獲取數(shù)據(jù)。
2.3CGI環(huán)境變量
CGI環(huán)境變量[5]是CGI的重要內(nèi)容,所有的信息都是通過環(huán)境變量和CGI聯(lián)系,服務(wù)器與CGI程序交換信息的工作方式也是通過環(huán)境變量來實(shí)現(xiàn)的。當(dāng)通過瀏覽器訪問Web服務(wù)器時(shí),利用環(huán)境變量來保存所發(fā)出的請(qǐng)求,CGI程序再訪問這些環(huán)境變量,換句話說,環(huán)境變量是Web服務(wù)器和CGI腳本進(jìn)行數(shù)據(jù)傳遞的橋梁。
2.4CGI的調(diào)用方法
在Web網(wǎng)頁中調(diào)用CGI程序有兩種方法[5]:表單(FORM)和超鏈接(URL)。
1)表單(FORM)調(diào)用方法
當(dāng)Web頁面以表單的方式向Web服務(wù)器提交數(shù)據(jù)時(shí),把CGI程序存放的相對(duì)路徑放在