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