安 峰
(蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院信息技術(shù)系,蘇州215123)
傳統(tǒng)的嵌入式Web Server搭建方案中,不論是直接基于開源網(wǎng)絡(luò)協(xié)議棧(uip等),還是基于Linux平臺(tái)下的輕量級(jí)服務(wù)器(Httpd等),Web Server均是運(yùn)行在嵌入式設(shè)備當(dāng)中,這也是其名稱為“嵌入式Web Server”的原因,如圖1所示。但隨著Web技術(shù)的不斷發(fā)展,Server的體積越來越大,嵌入式Web Server已不再滿足于簡單的網(wǎng)頁發(fā)送、CGI等技術(shù),而是要求具有表單更新、實(shí)時(shí)流傳輸、大數(shù)據(jù)量交換和存儲(chǔ)以及復(fù)雜的后臺(tái)邏輯管理等功能。但與之相對(duì)的是嵌入式設(shè)備的硬件處理能力區(qū)別較大,很多設(shè)備無法負(fù)擔(dān)龐大的Web Server的運(yùn)行壓力?;诖?,我們提出了一種新的Server搭建方式,即將Server搬運(yùn)到運(yùn)算處理能力更強(qiáng)大的PC上,通過成熟的PHP+HTML+JavaScript等技術(shù)來實(shí)現(xiàn)功能強(qiáng)大、界面精美的Web Server。Server提供一種稱為“Web服務(wù)”的接口,與客戶端(嵌入式設(shè)備)互通信息。對(duì)于用戶而言,直接通過瀏覽器訪問或控制嵌入式設(shè)備,絲毫感覺不到Web服務(wù)器的位置變化,因此仍然可以被稱作“嵌入式Web Server”。這種策略類似于常見的網(wǎng)站設(shè)計(jì)中的前后臺(tái)架構(gòu),達(dá)到在最少的資源上最大化運(yùn)行效率的成效。
圖1 傳統(tǒng)的嵌入式Web Server
基于這一思路,可以不用再擔(dān)心硬件限制,在實(shí)際應(yīng)用中選擇主流的Apache+PHP+HTML 方案來搭建服務(wù)器。這種嵌入式Web Server的示意圖如圖2所示。
圖2 基于Web服務(wù)的嵌入式Web Server
當(dāng)系統(tǒng)中的節(jié)點(diǎn)設(shè)備數(shù)量眾多,或者是設(shè)備的開發(fā)平臺(tái)、系統(tǒng)不同(各種手機(jī)、設(shè)備等)的時(shí)候,這種Web Server更能體現(xiàn)優(yōu)越之處。通過Web服務(wù)接口來與眾多的設(shè)備通信,而設(shè)備通過Web請(qǐng)求,將自身采集到的數(shù)據(jù)發(fā)送到服務(wù)器,服務(wù)器在收集到數(shù)據(jù)后會(huì)進(jìn)行邏輯分析,按照PHP腳本所指定的功能將這些數(shù)據(jù)進(jìn)行存儲(chǔ)或者丟棄,并給設(shè)備特定的反饋信息。同時(shí),該服務(wù)器提供了一個(gè)完善的Web頁面,用戶可以通過瀏覽器來訪問到相應(yīng)的數(shù)據(jù),或者對(duì)設(shè)備進(jìn)行一定的控制。
搭建這種類型的服務(wù)器需要做兩方面的工作,一是搭建傳統(tǒng)意義上的Web服務(wù)器并實(shí)現(xiàn)服務(wù)接口;二是在嵌入式設(shè)備當(dāng)中編寫Web請(qǐng)求程序,不斷地更新自身狀態(tài)或者發(fā)送信息到網(wǎng)站服務(wù)器當(dāng)中。下文將對(duì)這些內(nèi)容進(jìn)行詳細(xì)介紹。
受限于嵌入式設(shè)備的處理能力,之前只能借助于Boa、Httpd等輕量級(jí)的Web服務(wù)器,現(xiàn)在可以采用更合適的Web服務(wù)器。Apache是一款開放源碼的HTTP服務(wù)器,可以在大多數(shù)計(jì)算機(jī)操作系統(tǒng)中運(yùn)行,由于其跨平臺(tái)和安全性而被廣泛使用,是最流行的Web服務(wù)器端軟件之一。它快速可靠并且可通過簡單的API擴(kuò)展、PHP/Python等腳本被內(nèi)嵌到服務(wù)器中。在本項(xiàng)目當(dāng)中,為了對(duì)服務(wù)器進(jìn)行高效的開發(fā),采用了目前比較流行的集成安裝包WAMP(或LAMP),其內(nèi)含Apache、PHP 和Mysql等功能。
在Linux平臺(tái)(ubuntu12.04)下搭建服務(wù)器及開發(fā)環(huán)境的簡單步驟如下:
LAMP 的安裝:sudo apt-get install apache2 mysqlserver mysql-client php5php5-gd php5-mysql。
phpmyadmin安裝:sudo apt-get install phpmyadmin。
Apache配置:啟用mod_rewrite模塊:sudo a2enmod rewrite;重啟Apache服務(wù)器:sudo/etc/init.d/apache2restart。
在Windows平臺(tái)下只需下載WAMP集成安裝包,即可進(jìn)行相應(yīng)安裝。
Web服務(wù)(Web Service)是一項(xiàng)新技術(shù),它能使得運(yùn)行在不同機(jī)器上的不同應(yīng)用無需借助附加的、專門的第三方軟件或硬件,就可相互交換數(shù)據(jù)或集成。Web服務(wù)通過標(biāo)準(zhǔn)的數(shù)據(jù)接口與客戶端進(jìn)行通信,在本項(xiàng)目當(dāng)中,采用了Json這種輕量級(jí)數(shù)據(jù)格式??蛻舳税l(fā)送與接收到的數(shù)據(jù)均是封裝成Json格式的數(shù)據(jù)包,這保證了系統(tǒng)的擴(kuò)展性與可維護(hù)性。
通過編寫PHP腳本程序來實(shí)現(xiàn)Web服務(wù)的諸多服務(wù)接口,以本項(xiàng)目為例,實(shí)現(xiàn)了多達(dá)21個(gè)服務(wù)接口,客戶端通過訪問這些接口,即可實(shí)現(xiàn)與服務(wù)器的通信。以其中一個(gè)為例,該服務(wù)接口接收客戶端的信息,返回相應(yīng)的反饋信息。接口規(guī)定如表1所列。
表1 Web服務(wù)接口規(guī)范
從表1可以看出,服務(wù)器提供了一個(gè)getRFID的服務(wù)接口,該接口接收三個(gè)參數(shù),同時(shí)對(duì)這些參數(shù)進(jìn)行分析判斷??蛻舳送ㄟ^訪問http://localhost/lvsemoban/interface/getRFID.php來發(fā)送相應(yīng)的信息,通信格式采用Json封裝。
服務(wù)器為了實(shí)現(xiàn)這一接口功能,需要編寫PHP腳本,本項(xiàng)目當(dāng)中對(duì)應(yīng)的PHP腳本內(nèi)容如下:
服務(wù)器通過$_REQUEST 來獲取客戶端所發(fā)送的信息參數(shù),進(jìn)行一系列的分析、判斷和處理之后,以Json格式返回給客戶端相應(yīng)的信息。在本項(xiàng)目當(dāng)中,客戶端把采集到的學(xué)生RFID 卡、教室名和上課時(shí)間發(fā)送至服務(wù)器,服務(wù)器會(huì)判斷這些信息的正確性,同時(shí)將處理后的信息存儲(chǔ)到數(shù)據(jù)庫當(dāng)中。其中,json_encode函數(shù)將返回?cái)?shù)據(jù)封裝成Json格式后再進(jìn)行返回。
而對(duì)于用戶而言,則無需接觸到這些復(fù)雜的后臺(tái)邏輯,只需在瀏覽器當(dāng)中輸入相應(yīng)網(wǎng)址,即可獲取到相應(yīng)信息。借助HTML+Javascript,服務(wù)器提供了一個(gè)良好的網(wǎng)站界面。同時(shí),服務(wù)器后臺(tái)通過Web服務(wù)接口與嵌入式設(shè)備的互通信息,并實(shí)時(shí)顯示在前臺(tái)頁面中。本項(xiàng)目所提供的Web頁面之一如圖3所示。
圖3 提供給用戶的Web界面
我們采用了Linux+QT 的軟件開發(fā)平臺(tái)來進(jìn)行嵌入式設(shè)備的軟件開發(fā)。當(dāng)系統(tǒng)采集到信息之后,會(huì)定時(shí)(間隔3s)訪問Web服務(wù)接口,QT 提供了一種http Request方案。在嵌入式設(shè)備的開發(fā)當(dāng)中,主要包括數(shù)據(jù)的封裝與發(fā)送。
在QT 平臺(tái)上,借用了開源Json代碼來進(jìn)行數(shù)據(jù)的封裝與解包。它提供了encode和decode兩個(gè)函數(shù),只需調(diào)用這兩個(gè)接口即可對(duì)數(shù)據(jù)進(jìn)行操作。解包出來的數(shù)據(jù)以map容器形式出現(xiàn),代碼當(dāng)中將容器中的數(shù)據(jù)提取出來即可進(jìn)行處理。
在本項(xiàng)目當(dāng)中,嵌入式設(shè)備采集到相關(guān)信息后會(huì)發(fā)送到服務(wù)器,并且接收服務(wù)器的處理結(jié)果進(jìn)行相應(yīng)的顯示。通過QT的信號(hào)—槽機(jī)制來整合對(duì)數(shù)據(jù)的發(fā)送與接收過程,在系統(tǒng)啟動(dòng)之初將QtNetwork的接收信號(hào)與我們的處理函數(shù)相連接,這樣,在接收到服務(wù)器的返回?cái)?shù)據(jù)之后,系統(tǒng)即可進(jìn)行相應(yīng)的處理與顯示,系統(tǒng)流程圖如圖4所示。
本文討論的基于Web服務(wù)的嵌入式Web Server的實(shí)現(xiàn)方法及應(yīng)用的主要技術(shù),使得開發(fā)者可以根據(jù)目標(biāo)硬件平臺(tái)的實(shí)際資源進(jìn)行選擇,不用再因?yàn)橛布Y源的限制而降低Web Server的性能。同時(shí),PHP腳本的引入,使得Web Server的功能與靈活性大大增強(qiáng)。更具實(shí)用意義的是,不僅嵌入式設(shè)備,其他智能手機(jī)等設(shè)備也完全可以與Web Server進(jìn)行通信,實(shí)現(xiàn)了多平臺(tái)的整合。目前該方案已在多款開源平臺(tái)上被實(shí)際應(yīng)用,在工程實(shí)踐中證明了其可行性。
圖4 客戶端數(shù)據(jù)發(fā)送與處理流程
[1]http://www.apache.org/.
[2]http://www.mythtv.org/.
[3]瑪麗尼,李軍.PHP、MySQL 和Apache編程導(dǎo)學(xué)[M].北京:機(jī)械工業(yè)出版社,2008.
[4]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008.
[5]文全剛.嵌入式Linux操作系統(tǒng)原理與應(yīng)用.北京:北京航空航天大學(xué)出版社,2002:155-169.
[6]亞荷毛爾.構(gòu)建嵌入式Linux系統(tǒng)[M].秦云川,譯.2版.北京:中國電力出版社,2011.