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