基於Web的嵌入式設備管理

基於Web的嵌入式設備管理

[日期:2004-12-9]

來源:電子技術應用  作者:周 山 李向濤 何 燕

[字體: ]

 摘要:討論了嵌入式系統中用Wind Web Server進行設備管理接口的開發,敘述了系統的結構和開發中的關鍵技術,介紹在ADSL匯接設備中的應用實例。

    關鍵詞:嵌入式系統 Wind Web Server 設備管理

隨着互聯網絡硬件、軟件的迅猛發展,嵌入式系統被廣泛應用到工作和生活的各個領域中,如何對這些設備進行管理成爲嵌入式系統軟件開發中的一個重要方面。用戶只有通過設備所提供的管理接口對共進行配置、管理和監控,因些管理接易用程度和效率成爲衡量設備優劣的重要標準之一。在嵌入式設備中加入HTTP服務能將其轉化成Web Server,可以向Internet或內部網提供基於Web的圖形化管理接口,用戶可以使用瀏覽器作爲接口來訪問嵌入式設備。這樣不僅使設備的易用性大大提高,而且可以省去專用管理軟件,從而方便地進行統一管理。

1Wind Web Server介紹

VxWorksWindRiver公司開發的具有工業體體育場地位的高位能實時操作系統內核,它是一個運行在目標機上的高性能、可裁減的嵌入式實時操作系統,具有先進的網絡功能,支持市面上逾90%的處理器。該公司的網絡協議棧產品Wind Web Server提供了功能強大的基於Web方式的網絡管理系統,可以無縫地集成到任何基於VxWorks的嵌入式應用中。

Wind Web Server具有以下特性:

·完全支持HTTP 1.1標準

·不需要文件系統

·支持Java Applets、圖像文件、聲音文件等

·可通過<WINDWEB>標記支持SSI

·URL處理可定製

·靈活配置的模塊結構

·腳本小(740KB

·支持用戶/用戶組/密碼認證

·IP過濾機制

·支持CGI

·可記錄日誌

·支持別名

·支持服務器推送(Server push)技術。

Wind Web Server採用模塊設計,可以方便地進行裁剪以滿足應用的特殊要求。根據配置,Wind Web Server需要740KB的內存。在嵌入式系統中硬件資源寶貴,有時並不需要文件系統。Wind Web Server提供了一個工具Pagepack,可以在編譯和連接時將Web內容放在程序代碼中,從而可以存儲在ROM中。

2Wind Web Server結構

嵌入式系統的使用的資源是受限的,在許多飛速下甚至沒有外部存儲系統,這一點要求嵌入式系統的Web服務器與UNIXWindows平臺上的Web服務器有很大不同。Wind Web Server採用模塊化和可伸縮的系統結構,允許用戶進行裁剪以滿足資源的不同限制。Wind Web Server的結構如圖1所示。

Wind Web Server由以下關鍵部分組成:

·Web服務器核心

·HTTP請求處理模塊(RPM

·RPM調度程序

·服務器端符號表

·API函數

2.1 Web服務器核心和RPM調度程序

Web服務器核心作爲一個任務運行在目標系統中。提供網絡服務綁定、Socket函數調用和初始化參數的設置等。RPM調度程序決定怎樣響應HTTP請求,即決定了HTTP請求的地址和RPM的對應關係。

2.2 HTTP請求處理模塊(RPM

HTTP請求處理模塊分爲兩大類:系統RPM和用戶RPM。其中系統RPM執行HTTP請求的基本處理,包括:記錄日誌、處理別名與MIME頭、IP地址檢查、密碼驗證和訪問限制。而用戶RPM處理具體的頁面請求,包括:文件系統RPMSSIServer Side IncludeRPMCGI PRM、用戶函數調用RPM、服務器推送RPM等。另外用戶可以使用自定義RPM完成一些特殊的處理過程。

2.3 服務器端符號表

Wind Web Server主要通過符號表來支持Web存取目標機中的變量,每個符號表包含如下屬性:

·Address 內存地址

·Name 名稱

·Descrip 描述

·Type 數據類型

·Num Elems 變量個數

·GET Routine 讀加調函數

·GET Param 調回調數數的參數

·SET Routine 寫回調函數

·SET Param 寫回調函數的參數

·Access ID 變量的訪問控制

將網頁請求和符號表聯繫起來的方法有兩種:擴展SSI和服務器推送。

1)擴展SSI的實現

可以在HTML網頁中使用<WINDWEB>標記,每個標記都與存在於Wind Web Server符號表中的一個讀或寫回調函數相對應。當網頁爲Wind Web Server請求時,包含變量值等動態信息的讀或寫回調函數輸出替代了網頁上的標記,從而動態顯示或提交數據內容。這項技術同時提高了在HTML頁中處理表單的能力。傳統的Web Server只能處理事先確定的缺省的表單元素,在Wind Web Server,實際值可以從符號表中得以,然後在HTML頁被提交到客戶端前插入到表單中。Wind Web Server還提供了一個工具formpack,用於在包含表單的普通網頁中加入<WINDWEB>標記。

Wind Web Server中已經包含標準的SSI實現,如輸入框、下拉列表、複選框等。另外,用戶可以加入自定義的SSI函數以處理特定的HTTP請求。

2)服務器推送的實現

HTTP是一種請求響應協議,如果要對服務器端進行持續的監控,必須不斷地發送請求刷新頁面,這將大大加重服務器的負擔。Wind Web Server能夠使用內嵌的Linve Control模塊在頁面中的Java applet與服務器端的符號表之間建立一條持續的交線鏈路,使服務器端符號表變量的改變無需客戶端請求而直接對客戶端發佈,從而實現了服務器推送的目的。

   
2.4 HTTP請求處理過程

一個典型的HTTP請求處理包含以下步驟:

1)接收到HTTP請求後,服務器取出包含目的URL的請求地字符串,將其存入描述HTTP請求的數據結構中;

2)如果該請求是頁面提交,即如下形式:http://target/xxx.xxx.htmpara1=xxx&para2=xxx,則將提交參數存入環境變量QUERY_STRING中。

3)調用所有已配置的系統RPM,如果返回正確,則繼續;

4)調用頁面對應的用戶PRM,如果該頁面中包含SSI標記,則調用SSI RPM

5)查找<WINDWEB>標記,例如:<WINDWEB FUNC=ShowValueSYMBOL=usersymbol></WINDWEB>則調用標準SSI函數ShowValue()對符號表中的變量usersymbol進行處理,然後將得到的變量值插入要返回的HTML頁面中,傳送至客戶端。

3 併發中的關鍵技術

3.1 自定義用戶RPM

通過調用函數httpRomConfAdd(HTTP_M_GET,"/user_rpm/"User_rpm),把形如http://x.x.x.x/user_rpm/*.htm?para1=xxx&para2=xxx的請求用函數框架如下:

short User_rpm(HTTP_REQ_ID reqId{

char* para;

httpStatusSet (reqId,HTTP_OK);

httpHeaderGenerate (reqId); /*產生THHP*/

para=httpGetEnv(reqId,"QUERY_STRING"); /*得到輸入參數*/

…… /*處理輸入參數及準備輸出結果*/

httpStringPut (reqId,"<HTML>..."); /*開始輸出*/

…… /*輸出全部HTML語句*/

httpStringPut(reqId,"...</HTML>") /*結束輸出*/

return(RPM_DONE);

}

3.2 自定義SSI處理函數

通過調用函數httpSsiFnConfAdd"user ssi",User_ssi)建立自定義SSI處理函數User_ssi。當而面中包含如下<WINDWEB>標記時:<WINDWEB FUNC=user_ssi para></WINDWEB>,服務器將調用函數User_ssi(參數爲para),並將輸入插到準備返回的HTTP頁面中。函數User_rpm的實實框架如下:

short User_ssi(HTTP_REQ_ID redid,char * szArg){

char *para;

parg=szArg; /*得到輸入參數*/

…… /*處理輸入參數及準備輸出結果*/

httpStringPut (reqId,"…") /*輸出全部HTML語句*/

return(HTTP_OK);

}

3.3 et Java applet實現服務器推送

Live Control模塊的API提供如下Java類的實現:

·DirectRegistry Applet與符號表進行通訊的基本部件

·DirectReadProxy DirectRegistry中獲取符號表變量的改變

·DirectWriteProxy 更新DirectRegistry中符號表變量的值

·DataObjectChangeListenetDataObjectStatusListener用於監聽的容器

Java applet實現服務器推送的框架如下:

1)創建用於連接服務器端的DirectRegistry類的實例:

myServerURL=newURL(http://"+getDocumentBase().getHost()+"/lc/");

myRegistry=new DirectRegistry(myServerURL);

(2)創建用於監聽符號表變量的Java部件:

myWidget=new TextWidget("0",10);

(3)創建DirectReadProxyDirectWriteProxy的實例用於讀寫符號表變量mySymbol

myReadProxy=new DirectReadProxy("mySymbol");

myWriteProxy=new DirectWriteProxy("mySymbol");

(4)Java部件myWidget加入myReadProxymy Write Proxy,成爲監聽容器:

myReadProxy.addDataObjectChangeListener(myWidget)

myWriteProxy.addDataObjectChangeListener(myWidget)

5)將已創建的監聽容器myReadProxymyWriteProxy加入myRegistry中,完成Applet與服務器端Live Control模塊的連接:

myRegistry.addPropertyChangeListener(myReadProxy);

myRegistry.addPropertyChangeListener(myWriteProxy)

另外,用戶可以創建自己的Java部件和DataObject ChangeListener方法,以完成更高級的應用。

3.4 配置HTTP服務

Wind Web Serrver可進行裁剪用於不同的應用環境,可配置的參數較多,同時參數之間相互影響。因此參數的配置是否妥當將直接影響HTTP服務的性能,甚至導致HTTP服務不能正常工作。其中對Web Server內存池的配置使用尤爲關鍵,需要進行仔細調整和多次測試。另外整個系統的網絡內存池的容量也直接影響HTTP服務的性能,需要結合系統規模進行配置。

4 實例應用

ADSL匯接器系統軟件的開發過程中,使用Wind Web Server開發了基於Web的圖形化設備管理接口,用戶在任何地點只需使用瀏覽器就可以對設備進行全面的管理,包括:

·可以對系統用戶認證和管理,不同的用戶具有不同的操作權限;

·可以對系統進行實時監控,頁面依照機櫃佈局設計。設備面板和頁面上的各種信號燈同步變化,一目瞭然。同時可以在頁面上直接使用設備面板上的各種按鍵,操作方便。採用了服務器推送技術,降低了網絡通信量和系統負擔;

·可以對初如化數據進行修改和保存;

·可以遠程更新整個軟件系統;

·可以隨時獲取和清除計費信息。

整個程序(含頁面代碼)共200K字節左右,任務的優先級設爲最低,不影響原系統的正常運行,達到了很好的效果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章