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