趙聯(lián)政 王桂海
摘 要:由于嵌入式設(shè)備硬件資源有限,傳統(tǒng)的Web服務(wù)搭建已不適用于現(xiàn)實(shí)需求。提出了基于Boa和CGI建立Web服務(wù)的理念,以解決遠(yuǎn)程控制、訪問(wèn)、監(jiān)控嵌入式設(shè)備的問(wèn)題。重點(diǎn)分析了嵌入式服務(wù)器的設(shè)計(jì)理念和Boa服務(wù)器的移植以及CGI的實(shí)現(xiàn)。將該設(shè)計(jì)應(yīng)用于智能監(jiān)控系統(tǒng),使用結(jié)果表明:該嵌入式服務(wù)器運(yùn)行穩(wěn)定、速度相對(duì)較快、簡(jiǎn)單安全,達(dá)到了預(yù)期目標(biāo)。
關(guān)鍵詞:嵌入式;Web服務(wù);智能監(jiān)控;Boa;CGI
DOIDOI:10.11907/rjdk.151283
中圖分類號(hào):TP303 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):1672-7800(2015)007-0010-03
0 引言
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,越來(lái)越多的電子設(shè)備和個(gè)人電腦通過(guò)網(wǎng)絡(luò)進(jìn)行互聯(lián)。嵌入式系統(tǒng)和設(shè)備近幾年進(jìn)入了高速發(fā)展時(shí)期,在工業(yè)控制和智能家居等領(lǐng)域得到了廣泛應(yīng)用。將嵌入式設(shè)備通過(guò)網(wǎng)絡(luò)接入因特網(wǎng)或局域網(wǎng)以實(shí)現(xiàn)遠(yuǎn)程管理和監(jiān)控,需要用到專門(mén)針對(duì)于嵌入式的Web服務(wù)器。用戶可以使用瀏覽器作為接口來(lái)訪問(wèn)嵌入式設(shè)備,這樣不僅能使嵌入式設(shè)備易用性大大提高,而且方便統(tǒng)一管理[1]。
1 嵌入式Web服務(wù)器設(shè)計(jì)
1.1 設(shè)計(jì)原理
嵌入式系統(tǒng)的特點(diǎn)就是軟硬件可裁剪,以及功能的專用性[2],在處理器以及RAM和ROM受限的情況下,傳統(tǒng)的Web服務(wù)器搭建在嵌入式設(shè)備上已不再適用。有的嵌入式系統(tǒng)沒(méi)有文件系統(tǒng)或TCP/IP協(xié)議棧,在嵌入式設(shè)備資源受限的情況下,保證嵌入式Web服務(wù)器正常運(yùn)行十分困難。為解決以上問(wèn)題,結(jié)合當(dāng)前嵌入式Web服務(wù)器的設(shè)計(jì)需求提出如下方案:將Boa服務(wù)器移植到嵌入式設(shè)備中,使其具備嵌入式Web服務(wù)器功能,并借助通用網(wǎng)關(guān)接口(Common Gateway Interface,CGI)技術(shù)連入到互聯(lián)網(wǎng),實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)與嵌入式Web服務(wù)器之間的實(shí)時(shí)動(dòng)態(tài)交互。
1.2 Boa與CGI組合實(shí)現(xiàn)原理
Boa是一款非常小巧的Web服務(wù)器,源代碼開(kāi)放、性能優(yōu)秀,支持CGI通用網(wǎng)關(guān)接口技術(shù),特別適合應(yīng)用在嵌入式系統(tǒng)中。Boa服務(wù)器主要功能是在互聯(lián)嵌入式設(shè)備之間進(jìn)行信息交互,達(dá)到通過(guò)網(wǎng)絡(luò)對(duì)嵌入式設(shè)備進(jìn)行監(jiān)控、并將反饋信息自動(dòng)上傳給主控設(shè)備的目的。它基于HTTP超文本傳輸協(xié)議,Web網(wǎng)頁(yè)是Web服務(wù)最基本的傳輸單元。嵌入式Web服務(wù)的工作基于客戶機(jī)/服務(wù)器計(jì)算模型,由Web瀏覽器(客戶機(jī))和Web服務(wù)器(服務(wù)器)構(gòu)成,也即著名的B/S結(jié)構(gòu)。
運(yùn)行于客戶端的瀏覽器首先要與嵌入式Web服務(wù)器Boa端建立連接:打開(kāi)一個(gè)套接字虛擬文件,此文件建立標(biāo)志著SOCKET連接建立成功。然后客戶端瀏覽器通過(guò)套接字SOCKET以GET或者POST參數(shù)傳遞方式向Web服務(wù)器提交請(qǐng)求,Web瀏覽器提交請(qǐng)求后,通過(guò)HTTP協(xié)議傳送給Web服務(wù)器。Web服務(wù)器接到請(qǐng)求后,根據(jù)請(qǐng)求的不同進(jìn)行事務(wù)處理,返回HTML文件或者通過(guò)CGI調(diào)用外部應(yīng)用程序,返回處理結(jié)果。服務(wù)器通過(guò)CGI與外部應(yīng)用程序和腳本之間進(jìn)行交互,根據(jù)客戶端瀏覽器在請(qǐng)求時(shí)所采用的方法,服務(wù)器會(huì)搜集客戶提供的信息,并將該部分信息發(fā)送給指定的CGI擴(kuò)展程序,CGI擴(kuò)展程序進(jìn)行信息處理并將結(jié)果返回給服務(wù)器。然后服務(wù)器對(duì)信息進(jìn)行分析,并將結(jié)果發(fā)送回客戶端在瀏覽器上顯示出來(lái),其工作原理如圖1所示。
2 嵌入式系統(tǒng)功能實(shí)現(xiàn)
2.1 Boa配置及在ARM上的移植流程
Boa的源程序從boa.c中的main( )主函數(shù)開(kāi)始執(zhí)行。在該源程序中對(duì)Web服務(wù)器進(jìn)行配置:為了在用戶訪問(wèn)Web服務(wù)器時(shí)能確定根目錄的位置,首先需要指定服務(wù)器的根目錄路徑服務(wù)器,fixup_server root( )函數(shù)用來(lái)設(shè)置該服務(wù)器的根目錄;接著read_config_files( )函數(shù)對(duì)其它服務(wù)器所需的參數(shù)進(jìn)行配置,比如服務(wù)器端口server_port、服務(wù)器名server_name、根文件目錄document_root等,其余大部分參數(shù)要專門(mén)從boa.conf文件中讀取,然后為CGI腳本設(shè)置環(huán)境變量。
這些配置都正確完成后,就為Boa創(chuàng)建套接字,使用TCP/IP協(xié)議,創(chuàng)建一個(gè)特別適合嵌入式系統(tǒng)的Web服務(wù)器。Boa移植流程如圖2所示。
2.2 Html頁(yè)面設(shè)計(jì)
一般來(lái)說(shuō),瀏覽器只能通過(guò)HTTP請(qǐng)求,從服務(wù)器端獲取靜態(tài)頁(yè)面,若用戶想要通過(guò)瀏覽器提交一些數(shù)據(jù)或者參數(shù)給服務(wù)器處理,并要得到處理結(jié)果,達(dá)到用戶和服務(wù)器的雙向交互,就需要HTML表單,即form[3]。
HTML表單是專門(mén)用于用戶從瀏覽器提交數(shù)據(jù)到服務(wù)器的一種常用方式,它由普通的HTML元素組成。用戶通過(guò)填寫(xiě)或操作頁(yè)面空間,通過(guò)提交表單的方式發(fā)送到服務(wù)器端進(jìn)行處理。以下是一個(gè)表單示例:
從上述HTML設(shè)計(jì)中可以看出,該表單的功能是:通過(guò)“POST”方式,將表單中的內(nèi)容上傳到服務(wù)器,由于表單里的數(shù)據(jù)需要服務(wù)器進(jìn)行驗(yàn)證,就指定調(diào)用cgi-bin目錄下的set_msg.cgi腳本進(jìn)行處理。本文以驗(yàn)證填寫(xiě)的報(bào)警電話號(hào)碼格式是否正確為例,介紹服務(wù)器端CGI程序如何對(duì)瀏覽器提交的電話號(hào)碼進(jìn)行驗(yàn)證。
2.3 CGI程序編寫(xiě)
用CGIC對(duì)CGI程序進(jìn)行C語(yǔ)言開(kāi)發(fā)時(shí),可以用模塊替換CGIC,或者直接將編寫(xiě)的CGI程序和cgic.c以及cgic.h共同編譯。cgic.c是整個(gè)CGIC函數(shù)庫(kù)的本質(zhì)。從cgic.c可以了解到,其已經(jīng)對(duì)main函數(shù)進(jìn)行了定義,對(duì)于CGI程序要使用CGIC進(jìn)行編寫(xiě),都是從cgic.c中的代碼入口,在庫(kù)函數(shù)進(jìn)行了一系列初始化操作之后(獲取系統(tǒng)環(huán)境變量、解析參數(shù)等等),才能夠調(diào)用用戶編寫(xiě)的代碼。所以在開(kāi)發(fā)CGI程序時(shí),要調(diào)用CGIC庫(kù),不能繼續(xù)使用main(),而是要使用CGIC提供的cgiMain()來(lái)開(kāi)始程序[4]。
CGI程序可以采用任何讀寫(xiě)標(biāo)準(zhǔn)輸入/輸出語(yǔ)言,比如C、C++或者Java等,由于嵌入式系統(tǒng)的特殊性,一般選用C語(yǔ)言進(jìn)行編程。下面是一個(gè)CGI程序部分示例:
該程序是響應(yīng)上一節(jié)瀏覽器驗(yàn)證電話號(hào)碼的程序,返回的結(jié)果是彈出新頁(yè)面提示驗(yàn)證成功。
3 嵌入式Web服務(wù)器在智能監(jiān)控系統(tǒng)中的應(yīng)用
嵌入式Web服務(wù)器在智能家居與智能監(jiān)控領(lǐng)域應(yīng)用
廣泛。在遠(yuǎn)程PC機(jī)打開(kāi)網(wǎng)頁(yè),輸入正確的地址,就可以隨時(shí)查看服務(wù)器端信息采集的結(jié)果,其界面如圖3所示。
圖3 智能監(jiān)控系統(tǒng)
4 結(jié)語(yǔ)
嵌入式Web服務(wù)器是實(shí)現(xiàn)嵌入式系統(tǒng)通過(guò)Web方式與因特網(wǎng)互聯(lián)的關(guān)鍵,對(duì)其進(jìn)行研究對(duì)嵌入式互聯(lián)網(wǎng)技術(shù)的發(fā)展有重要意義。本文介紹了嵌入式Web服務(wù)器設(shè)計(jì)的理念和流程,重點(diǎn)闡述了Boa與CGI的實(shí)現(xiàn)原理,通過(guò)一個(gè)智能監(jiān)控項(xiàng)目的部分模塊成功實(shí)現(xiàn)了該設(shè)計(jì)。隨著物聯(lián)網(wǎng)和嵌入式技術(shù)的發(fā)展,該嵌入式網(wǎng)絡(luò)技術(shù)將會(huì)得到更加廣泛的應(yīng)用和發(fā)展。
參考文獻(xiàn):
[1] 謝仕義,徐兵.嵌入式 Web服務(wù)器的設(shè)計(jì)及其CGI 實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007(7):1598-1599.
[2] 范延濱,于忠清,鄭立愛(ài). 嵌入式系統(tǒng)原理與開(kāi)發(fā)[M].北京:機(jī)械工業(yè)出版社,2010.
[3] 任作為.嵌入式Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[D]. 荊州:長(zhǎng)江大學(xué),2013.
[4] 雷娟娟,趙詣. 嵌入式Web服務(wù)器的設(shè)計(jì)及其CGI實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2014(7):235-236.
責(zé)任編輯(責(zé)任編輯:杜能鋼)