黃雅菁 上海市貿(mào)易學(xué)校計(jì)算機(jī)教研部
嵌入式系統(tǒng)以其可裁剪、可靠性和高性價(jià)比贏得了市場(chǎng)青睞,可接入Internet的嵌入式設(shè)備使得未來(lái)的生活更加自動(dòng)化,智能化和人性化。在嵌入式設(shè)備的管理與交互中,客戶端可以通過(guò)Web瀏覽器對(duì)嵌入式設(shè)備進(jìn)行管理和監(jiān)控。嵌入式Web服務(wù)器(EWS ,Embedded Web Server)是專門(mén)針對(duì)嵌入式設(shè)備設(shè)計(jì),目的是在于擴(kuò)展式設(shè)備功能,為遠(yuǎn)程監(jiān)控提供有力支持,使傳統(tǒng)的測(cè)試和控制設(shè)備轉(zhuǎn)變?yōu)榫邆淞艘訲CP/IP為底層通信協(xié)議,Web技術(shù)為核心的基于互聯(lián)網(wǎng)的網(wǎng)絡(luò)測(cè)試和控制設(shè)備。
目前,常用的Web服務(wù)器,有GoAhead、thttdpd和Boa。
GoAhead Web服務(wù)器是開(kāi)源的,體積小,性能高,支持需要在基于瀏覽器管理模式的設(shè)備上傳遞動(dòng)態(tài)信息。同時(shí),GoAhead Web服務(wù)器支持多種操作系統(tǒng)和開(kāi)發(fā)平臺(tái),具有很強(qiáng)的可移植性。缺點(diǎn)是對(duì)ASP的支持意味著要依靠微軟平臺(tái),在安全方面的沒(méi)有過(guò)多的考慮。
Thttpd服務(wù)器代碼少,占用內(nèi)存少,缺點(diǎn)是只能運(yùn)行在類Linux操作系統(tǒng)上,對(duì)所有文件都是一次讀取完畢,同時(shí)緩存下來(lái),因此在運(yùn)行過(guò)程中占用資源多。
Boa是單任務(wù)的Web服務(wù)器,通過(guò)建立 HTTP 請(qǐng)求列表來(lái)處理多路 HTTP 連接請(qǐng)求,只為 CGI 程序創(chuàng)建新的進(jìn)程,占用資源少。同時(shí)它還具有自動(dòng)生成目錄、自動(dòng)解壓文件等功能,具有很高的HTTP 請(qǐng)求處理速度和效率。
表一 幾種嵌入式WEB服務(wù)器性能比較
由表一可見(jiàn),對(duì)于程序性能指標(biāo)沒(méi)有很高要求的需求,建議選擇輕量級(jí)的Thttpd;對(duì)于安全性沒(méi)有很高要求而且對(duì)跨平臺(tái)要求的需求,建議采用GoAhead;對(duì)于安全性和軟件性能指標(biāo)有高要求的需求,建議采用Boa。相比較而言,Boa的功能強(qiáng),速度快,安全性高,占用資源少,適合資源相對(duì)有限的嵌入式系統(tǒng)。
在嵌入式Web 服務(wù)器的設(shè)計(jì)方法中,多進(jìn)程并發(fā)結(jié)構(gòu)為了響應(yīng)客戶機(jī)的請(qǐng)求創(chuàng)建多個(gè)進(jìn)程,而創(chuàng)建子進(jìn)程會(huì)占用系統(tǒng)較多的資源。Boa Web服務(wù)器中的多路復(fù)用I/O模型解決了多進(jìn)程并發(fā)結(jié)構(gòu)中創(chuàng)建子進(jìn)程帶來(lái)的系統(tǒng)資源消耗問(wèn)題。它允許把進(jìn)程本身掛起來(lái),而同時(shí)使系統(tǒng)內(nèi)核監(jiān)聽(tīng)所要求的一組文件描述符的任何活動(dòng),主要確認(rèn)在任何被監(jiān)控的文件描述符上出現(xiàn)活動(dòng),select()調(diào)用將返回指示該文件描述符已準(zhǔn)備好的消息,從而實(shí)現(xiàn)了為進(jìn)程選出隨機(jī)的變化,而不必由進(jìn)程本身對(duì)輸入進(jìn)行測(cè)試而浪費(fèi)CPU開(kāi)銷。文件描述符有兩種工作方式:阻塞與非阻塞。阻塞方式是指,當(dāng)試圖對(duì)該文件描述符進(jìn)行讀寫(xiě)時(shí),如果當(dāng)時(shí)沒(méi)有東西可讀或者暫時(shí)不可寫(xiě),程序就進(jìn)入等待狀態(tài),直到有東西可讀或者可寫(xiě)為止。非阻塞方式是指,如果沒(méi)有東西可讀,或者不可寫(xiě),讀寫(xiě)函數(shù)馬上返回,而不會(huì)等待。使用select判斷一組文件描述符中是否有一個(gè)可讀或可寫(xiě),如果沒(méi)有就阻塞,直到有一個(gè)的時(shí)候就被喚醒。只要設(shè)置好select的各個(gè)參數(shù),那么當(dāng)文件可以讀寫(xiě)的時(shí)候select會(huì)“通知”。select模式服務(wù)器端構(gòu)架如下:
多路復(fù)用I/O解決了多進(jìn)程并發(fā)結(jié)構(gòu)中創(chuàng)建子進(jìn)程帶來(lái)的資源問(wèn)題,此模型實(shí)際上是將UDP循環(huán)模型用在了TCP上面。這也會(huì)帶來(lái)一些問(wèn)題,如由于服務(wù)器依次處理客戶的請(qǐng)求,所以可能導(dǎo)致有的客戶會(huì)等待很久,多線程并發(fā)結(jié)構(gòu)的代價(jià)很小,但另一方面由于線程間共享內(nèi)存,增加了編程的復(fù)雜性。
本次主要利用嵌入式Web服務(wù)器完成車輛檢測(cè)系統(tǒng)的遠(yuǎn)程查看和設(shè)置工作。原則上要方便管理人員對(duì)系統(tǒng)的管理和維護(hù),并且滿足對(duì)數(shù)據(jù)的高效管理,保證用戶通過(guò)瀏覽器將配置信息下發(fā),并將需要查看的數(shù)據(jù)及時(shí)迅速的顯示給用戶,所有的數(shù)據(jù)結(jié)果存儲(chǔ)在本地配置文件中,當(dāng)客戶端使用Web瀏覽器訪問(wèn)嵌入式Web服務(wù)器時(shí),需要進(jìn)行身份驗(yàn)證,以確保系統(tǒng)的安全性和防止非法用戶的訪問(wèn)。
3.3.1 移植 Boa
建立Boa服務(wù)器的安裝配置步驟如下:
(1)下載boa源代碼。boa Web服務(wù)器的源代碼可以從http://www.boa.org下載。我們采用的是 boa-0.94.13 這個(gè)版本,下載然后解壓縮。
# tar zxvf boa-0.94.13.tar.gz
將其重命名為boa。
(2)安裝并編譯boa源代碼。我們將boa源代碼解壓到/home目錄下,編譯安裝源:
#cd /home/boa/src
在安裝之前我們需要設(shè)置boa安裝的主目錄
# cd src
在 src/defines.h中添加
# define SERVER_ROOT “/home/boa”
然后編譯
#./configure
修改Makefile文件
找到CC=gcc,將其改成CC = arm-linux-gcc,
找到CPP = gcc E,將其改成CPP = arm-linux-gcc E,
并保存退出。
然后運(yùn)行make進(jìn)行編譯,得到的可執(zhí)行程序?yàn)閎oa,將調(diào)試信息剝?nèi)?,得到的最?/p>
程序只有約60KB大小。
# make
# arm-linux-strip boa
在boa/src目錄下將生成boa文件,該文件即為Boa服務(wù)器執(zhí)行文件。
3.3.2 配置 Boa 服務(wù)器
boa啟動(dòng)時(shí)將加載一個(gè)配置文件boa.conf,在boa程序運(yùn)行前,必須首先編輯該文件,并將其放置于src/defines.h文件中SERVER_ROOT宏定義所定義的缺省目錄,或者在啟動(dòng)boa時(shí)使用參數(shù)“-c”指定boa.conf的加載目錄。
將User root 改為User nobody
將Group root 改為Group 0
將DocumentRoot/var/www 改為DocumentRoot/home/boa
將 MimeTypes/etc/mime.types 改 為 MimeTypes /home/boa/mime.types
將ScriptAlias /cgi-bin/ 改為/home/boa/cgi-bin/
將 ScriptAlias /index.html/ 改 為 /home/boa/index.html/
用戶可以根據(jù)自己需要,對(duì) boa.conf 進(jìn)行修改,但必須要保證其他的輔助文件和設(shè)置必須和 boa.conf 里的配置相符,不然 Boa就不能正常工作。將所有的.cgi文件拷貝到/home/boa/cgi-bin/目錄下,將所有 HTML 文件拷貝到/home/boa/html文件夾下面,將 boa.conf 拷貝到/home/boa 下面。CGI 腳本測(cè)試很容易發(fā)生權(quán)限不夠的問(wèn)題,要保證 Boa 訪問(wèn)的主目錄、CGI腳本目錄以及臨時(shí)文件目錄(如果沒(méi)有設(shè)置 TMP 環(huán)境變量時(shí),缺省值是/tmp 目錄)都必須能被 Boa 運(yùn)行時(shí)所代表的用戶完全訪問(wèn),該用戶由 boa.conf 中的 user指出。
3.3.3 測(cè)試 Boa 服務(wù)器
測(cè)試 Boa 能否正常工作,靜態(tài) HTML 頁(yè)面能否正常訪問(wèn),CGI 腳本能否正常運(yùn)行。index.html為測(cè)試主頁(yè)面,images為存放各種圖片的子目錄,cgi-bin為CGI腳本的存放目錄。根據(jù)boa.conf的配置,目前HTML文檔的主目錄為/home/html,CGI腳本目錄為/home/boa/cgi-bin。在PC機(jī)上運(yùn)行瀏覽器進(jìn)行測(cè)試,在地址欄輸入目標(biāo)系統(tǒng) IP,即 http://10.24.1.121,可以看到相關(guān)頁(yè)面,表示靜態(tài)HTML頁(yè)面測(cè)試通過(guò)。
根據(jù)需求我們主要是用Web對(duì)嵌入式停車檢測(cè)系統(tǒng)中的數(shù)據(jù)進(jìn)行遠(yuǎn)程的設(shè)置和查看,管理員通過(guò)瀏覽器選擇要設(shè)置查看底層車輛信息采集器收集的的車輛信息,通過(guò)HTML表單將所選內(nèi)容提交給CGI程序,CGI腳本獲取用戶發(fā)的信息并解碼,然后執(zhí)行相應(yīng)的數(shù)據(jù)庫(kù)程序,通過(guò)約定的路徑訪問(wèn)數(shù)據(jù)庫(kù),并將訪問(wèn)結(jié)果通過(guò)HTML送回給用戶端瀏覽器。
在測(cè)試規(guī)范和目的明確的情況下,設(shè)計(jì)了測(cè)試方案,根據(jù)選擇的測(cè)試用例對(duì)系統(tǒng)功
能以及穩(wěn)定性、可靠性進(jìn)行了測(cè)試和分析。本次測(cè)試計(jì)劃為嵌入式Web服務(wù)器功能測(cè)試。其具體內(nèi)容為:通過(guò)嵌入式Web服務(wù)器是否能實(shí)現(xiàn)對(duì)嵌入式車輛檢測(cè)系統(tǒng)進(jìn)行遠(yuǎn)程管理,即完成遠(yuǎn)程用戶對(duì)信息的的訪問(wèn)查詢與設(shè)置等功能。
(1)車位實(shí)時(shí)上報(bào)狀態(tài):
a) 占用情況 正確
b) 在線情況 正確
c) 電量報(bào)警 正確
d) 通信超時(shí)報(bào)警 正確
(2)車位信息查詢
e) 占用情況 正確
f) 在線情況 正確
g) 電量情況 正確
h) 通信超時(shí)報(bào)警 正確
(3)車位信息配置
i) 上報(bào)周期 正確
j) 報(bào)警周期 正確
k) 網(wǎng)絡(luò)參數(shù) 正確
測(cè)試表明該系統(tǒng)具有界面友好、低成本、設(shè)計(jì)簡(jiǎn)單、操作方便等優(yōu)點(diǎn),完全滿足對(duì)嵌入式車輛檢測(cè)系統(tǒng)遠(yuǎn)程設(shè)置和查看的要求。
本文主要對(duì)比了幾種現(xiàn)有的嵌入式Web服務(wù)器,將Boa Web服務(wù)器應(yīng)用到車輛檢測(cè)系統(tǒng),基本實(shí)現(xiàn)了通過(guò)客戶端來(lái)遠(yuǎn)程監(jiān)控車輛信息的功能。我們使用了開(kāi)源的Boa Web Server,在使用的過(guò)程中也發(fā)現(xiàn)Boa的不足,我們可以通過(guò)采用以下措施來(lái)提高系統(tǒng)性能,以此作為未來(lái)改進(jìn)Web服務(wù)器的方法:
(1)減小Web服務(wù)器中請(qǐng)求的生命周期。
請(qǐng)求的生命周期指的是當(dāng)Web服務(wù)器收到客戶的一個(gè)HTTP請(qǐng)求并發(fā)出所請(qǐng)求的文件之前,Web服務(wù)器必須執(zhí)行一系列指令。請(qǐng)求的生命周期直接影響到服務(wù)器的響應(yīng)時(shí)間。所以將系統(tǒng)調(diào)用和其他處理開(kāi)銷最小化是十分重要,可以通過(guò)減少文件緩存來(lái)達(dá)到。
(2)采用瘦服務(wù)器、胖客戶機(jī)的應(yīng)用模式。
胖客戶端模式意味著在應(yīng)用結(jié)構(gòu)上相當(dāng)數(shù)量的應(yīng)用邏輯都在客戶端執(zhí)行。不產(chǎn)生與服務(wù)器往返通信的過(guò)程,減少了網(wǎng)絡(luò)通信量、延遲等,減少了Web服務(wù)器的負(fù)擔(dān)。
(3)增加多用戶認(rèn)證
目前的Boa是單用戶機(jī)制,對(duì)于多用戶不支持,這樣限制了多用戶的訪問(wèn)和管理,我們可以引入多用戶認(rèn)證機(jī)制,既實(shí)現(xiàn)了多用戶登錄的基本需求,也可以增加安全性。