《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 嵌入式系統(tǒng)Web服務器應用研究開發(fā)
嵌入式系統(tǒng)Web服務器應用研究開發(fā)
來源:微型機與應用2011年第11期
魏宏安,徐藝文,金志濤
(福州大學 物理與信息工程學院,福建 福州 350002)
摘要: 介紹了一種嵌入式Web服務器應用系統(tǒng)。該系統(tǒng)借鑒傳統(tǒng)服務器系統(tǒng)架構,基于B/S結構模式設計,移植嵌入式TCP/IP協(xié)議棧,利用CGI技術以實現(xiàn)客戶端和服務器端的動態(tài)數(shù)據(jù)交互。通過本研究可方便實現(xiàn)系統(tǒng)管理、遠程終端參數(shù)設置等實際應用。
Abstract:
Key words :

摘  要: 介紹了一種嵌入式Web服務器應用系統(tǒng)。該系統(tǒng)借鑒傳統(tǒng)服務器系統(tǒng)架構,基于B/S結構模式設計,移植嵌入式TCP/IP協(xié)議棧,利用CGI技術以實現(xiàn)客戶端和服務器端的動態(tài)數(shù)據(jù)交互。通過本研究可方便實現(xiàn)系統(tǒng)管理、遠程終端參數(shù)設置等實際應用。
關鍵詞: 嵌入式系統(tǒng);Web服務器;B/S結構模式; TCP/IP協(xié)議棧;CGI

 信息技術、網(wǎng)絡技術以及嵌入式技術的飛速發(fā)展和融合,在嵌入式系統(tǒng)中內嵌TCP/IP協(xié)議,將Web服務器技術引入到嵌入式系統(tǒng)中,可使其系統(tǒng)與現(xiàn)今最大的網(wǎng)絡Internet實現(xiàn)無縫連接。嵌入式系統(tǒng)組成的三個基本要素[1]為:嵌入、專用性和計算機。根據(jù)嵌入式系統(tǒng)本身特性優(yōu)化設計,引入開源TCP/IP協(xié)議棧,并根據(jù)需要進行裁剪,利用公共網(wǎng)關接口(CGI)應用開發(fā),嵌入式Web服務器可以向任何接入它所在網(wǎng)絡的合法用戶提供統(tǒng)一的基于瀏覽器方式的操作和控制界面,提供特定交互功能。
1 嵌入式Web服務器的系統(tǒng)結構
 基于當前大型服務器使用的信息管理系統(tǒng)架構方案(數(shù)據(jù)庫+Web服務器+動態(tài)網(wǎng)頁技術),本文提出一種面向嵌入式、借助CGI網(wǎng)關接口開發(fā)的B/S結構模式Web服務器信息交互系統(tǒng),與傳統(tǒng)的兩層C/S模式相比,其有如下優(yōu)點:
 (1)系統(tǒng)架構維護方便,可根據(jù)需要更新客戶端程序,不用像傳統(tǒng)的兩層C/S模式那樣,必須更新所有客戶端程序,使其保持一致,系統(tǒng)才可以運行管理。
 (2)客戶機負載減輕,無須安裝客戶端軟件,統(tǒng)一的Internet瀏覽器方便了用戶的使用和服務端的應用開發(fā),并提供了友好人機界面設計。
 (3)系統(tǒng)安全保障提高,避免了客戶端與服務器的數(shù)據(jù)庫直接相連。
B/S模式組成部分為:表示層:Web瀏覽器,顯示邏輯部分,充當Client角色;功能層:Web服務器,事務處理邏輯部分;數(shù)據(jù)層:數(shù)據(jù)庫服務器,數(shù)據(jù)處理邏輯部分。功能層和數(shù)據(jù)層共同充當Server角色。B/S模式架構如圖1所示。

2 Microchip TCP/IP協(xié)議棧[2]
 協(xié)議接口設計借助于Microchip公司提供的免費協(xié)議棧——Microchip TCP/IP協(xié)議棧,它是基于TCP/IP的一套應用程序,類似于TCP/IP參考模型,Microchip TCP/IP協(xié)議棧將TCP/IP協(xié)議棧分為多層,如圖2所示。每層的實現(xiàn)代碼駐留在一個獨立的源文件中,而服務和應用程序編程接口(API)是通過頭文件或包含文件定義的。與傳統(tǒng)TCP/IP協(xié)議棧實現(xiàn)方法的不同,Microchip TCP/IP協(xié)議棧添加了StackTask和ARPTask兩個新模塊。StackTask管理協(xié)議棧以及所有模塊的操作,而ARPTask管理地址解析協(xié)議ARP(Address ResohJtion Protocol)層的服務。

 與完整、復雜的TCP/IP協(xié)議體系相比,在嵌入式Web服務器中并不需要實現(xiàn)所有的協(xié)議,而是基于嵌入式要素特點的要求以及嵌入式系統(tǒng)資源限制進行適量裁剪。來自客戶端的數(shù)據(jù)信息通過RJ-45以太網(wǎng)接口和網(wǎng)絡接口芯片傳遞給微控制器,微控制器通過內嵌的Microchip TCP/IP協(xié)議棧實現(xiàn)了地址解析(ARP)協(xié)議、Internet控制報文協(xié)議(ICMP)、IP協(xié)議、用戶數(shù)據(jù)報(UDP)等協(xié)議的解析和封包,應用層上負責Web頁面請求和應答的HTTP協(xié)議。本文設計的協(xié)議棧管理程序基于協(xié)議的層次性,具有模塊化思想。當接收到正確的以太網(wǎng)幀后,根據(jù)以太網(wǎng)的數(shù)據(jù)類型將接收的數(shù)據(jù)送至相應的模塊進行進一步處理。
3 CGI技術
 由于傳統(tǒng)的Web服務器無法實現(xiàn)Web數(shù)據(jù)庫訪問功能,CGI技術充當了訪問數(shù)據(jù)庫的重要媒介。CGI是使用應用相關軟件增強Web服務器的一種標準方法,可以用任何語言書寫。CGI根據(jù)需求更新網(wǎng)頁,是一種公共網(wǎng)關接口。它通過客戶提供給Web服務器的各種信息,由Web服務器啟動指定CGI模塊函數(shù),完成客戶端與服務器端動態(tài)的交互,從而實現(xiàn)靜態(tài)HTML網(wǎng)頁無法實現(xiàn)的功能(如表單查詢、數(shù)據(jù)庫查詢等)。通常CGI應用程序處于休眠狀態(tài),通過使用一定的網(wǎng)絡事件觸發(fā)回調函數(shù)來實現(xiàn),并顯示動態(tài)頁面。例如,Web服務器收到一個URL里面包含的網(wǎng)頁請求時,將執(zhí)行結果返回給HTML網(wǎng)頁,CGI可實現(xiàn)處理表格、數(shù)據(jù)庫查詢和電子郵件等操作。
3.1 CGI接口規(guī)范數(shù)據(jù)通信方式
 CGI定義的接口規(guī)范包括[3]環(huán)境變量、標準輸入和標準輸出。
3.1.1 環(huán)境變量
 環(huán)境變量是Web服務器與CGI程序進行數(shù)據(jù)傳遞的途徑,其定義了CGI程序運行的環(huán)境。客戶端和服務器端都將有關數(shù)據(jù)信息轉換成各種變量,CGI模塊函數(shù)從環(huán)境變量中提取服務器或是瀏覽器提供的參數(shù)信息(網(wǎng)絡設備參數(shù)),以此獲取客戶端的信息。
3.1.2 標準輸入
 標準輸入(STDIN)指CGI函數(shù)獲取Web服務器信息的一種規(guī)范,即使用HTML表單向Web服務器發(fā)送信息,通常CGI通過兩種調用方式獲取客戶請求[4]。
 (1)通過URL直接調用,如http://192.168.16.108。
 (2)通過交互式Form調用,通常是用戶輸入信息主頁后,點擊“確認”按鈕后啟動CGI程序。提交數(shù)據(jù)有Get和 Post兩種模式:Get通過環(huán)境變量傳遞給CGI程序,Post通過環(huán)境變量和標準輸入傳遞給CGI程序。本文采取上述兩種方式調用CGI模塊函數(shù),并通過交互式Form調用,采用Post提交數(shù)據(jù)方式,進行網(wǎng)絡參數(shù)設置。

 


3.1.3 標準輸出
 標準輸出(STDOUT)是CGI輸出的一種方式,指CGI程序處理結束后將結果(如應答信息)發(fā)送給Web服務器的一種方式。執(zhí)行結果必須是瀏覽器能夠顯示的HTML標準格式。
3.2 CGI工作原理
 通過使用一定的網(wǎng)絡事件觸發(fā)機制(如客戶機)向服務器發(fā)送HTTP請求,即調用CGI請求。CGI請求中的網(wǎng)絡參數(shù)等信息是以標簽指示的。當應用程序CGI模塊函數(shù)被調用時,初始化工作區(qū),把客戶端請求從環(huán)境變量和標準輸入中取出,創(chuàng)建局部變量以匹配請求中的標簽。如果沒有從客戶端傳來參數(shù)信息,則調用用戶提供的函數(shù)以取得設備當前狀態(tài),顯示給客戶端瀏覽器。此外,用戶可以通過網(wǎng)頁操作界面設置設備新的工作網(wǎng)絡參數(shù)并發(fā)給Web服務器。Web服務器利用CGI模塊函數(shù)提取網(wǎng)絡傳送來的新網(wǎng)絡參數(shù),并利用應用程序設定設備新的狀態(tài),同時回送給客戶端瀏覽器,通過客戶端瀏覽器和Web服務器交互對設備進行控制。作為嵌入式應用開發(fā),面對對象環(huán)境要求,嵌入到對象體系中,按對象的要求對其軟件和硬件進行裁剪,就像標準的CGI作為獨立可執(zhí)行文件完成的功能,本文中的應用是作為一個CGI模塊函數(shù)嵌入到Web服務器內部,統(tǒng)一編譯后整體運行,作為用戶Web開發(fā)的接口。
3.3 CGI工作流程
 CGI函數(shù)和服務器之間通過標準輸入(STDIN)和標準輸出(STDOUT)傳遞信息,如圖3所示。服務器通過STDOUT向CGI函數(shù)傳遞需求信息,CGI函數(shù)讀取環(huán)境變量和STDIN,根據(jù)流程將滿足條件的信息輸出給STDOUT。即對于Web服務器而言,STDOUT將信息流送至CGI函數(shù)的STDIN,CGI函數(shù)的STDOUT信息流將送至服務器的STDIN,從而形成一個環(huán)路。

4 Web服務器建立及工作過程
4.1 Web服務器建立

 實現(xiàn)動態(tài)Web頁面的準備工作是利用HTML語言編寫Web頁及內建表單,依據(jù)Web網(wǎng)頁提交的信息項目,編寫對應的CGI模塊程序。
 HTML 表單是一種把一組URL(如主機上的一個文件名)下的控件組成集合的方法,同時每個控件保持自己獨立的標識。該表單仿效可填寫的紙質表單,帶有文本區(qū)域和選擇框等。當用戶填完表單,即通過網(wǎng)頁形式設置設備的網(wǎng)絡參數(shù)后,用戶點擊保存按鈕,把它提交給服務器。在此過程中,服務器接收瀏覽器提取的表單信息,決定返回哪一個頁面[5]。
 利用<Form></Form>標記將輸入域組合起來,說明表單的名稱、數(shù)據(jù)傳達的目的地點以及傳送方法等。
格式:<form method=METHOD  action=”URL”  name="FORM NAME">
 如上所述,本文表單設計如下
   …
 <form method="post" action="serverset.htm" name="serverset">
   …
 采用POST方式進行數(shù)據(jù)提交。
4.2 Web服務器工作過程
 客戶端利用IE瀏覽器登錄到服務器發(fā)出服務器請求,此處的服務器就是VOIP系統(tǒng)通話終端設備。服務器響應用戶請求,并引導到指定的腳本程序,即CGI模塊函數(shù)。處于安全的考慮,需要進行相應的身份驗證,身份驗證登錄界面如圖4所示。

 身份驗證后,執(zhí)行CGI應用程序,進入終端網(wǎng)絡參數(shù)信息的設置主頁面,以達到通過網(wǎng)絡遠程控制嵌入式設備的目的,如圖5所示。
 點擊左欄的網(wǎng)絡應用配置,進入到網(wǎng)絡應用配置頁面,HTML表單語言為:
 ~inc:header.inc~
 <div id="content">
 <h1>網(wǎng)絡應用配置 </h1>
 <form method="post" action="serverset.htm" name="serverset">
 <fieldset>
 注冊服務器的語言為:
 <div><label>IP地址:</label>
 <input type="text" name="regip" value=
 "~config_regserverip~" /></div>

  注冊服務器IP地址以標簽(config_regserverip)指示,點擊保存按鈕后,服務器進行相應處理,此時,提取文本框中用戶的輸入信息“192.168.16.104.”替換標簽,即利用表單域中的值進行替換,以達到用戶遠程對設備參數(shù)的設置功能。所以<input type="text" name="regip" value="~config_regserverip~"/></div>變成了<input type="text" name="regip" value="192.168.16.104" /></div>。
 然后利用自定義HTTPPrint_config_regserverip()函數(shù)直接定向到TCP連接,將用戶設置參數(shù)信息顯示在HTML表單頁面里。
 case 0x00000034:
            HTTPPrint_config_regserverip();
            break;
 void HTTPPrint_config_regserverip(void)
 {
     TCPPutString(sktHTTP, NetConfig.ServerIP);
     return;
 }
 最終配置頁面如圖6所示,完成遠程配置任務。

 終端參數(shù)控制只是B/S模式嵌入式Web遠程控制系統(tǒng)的一個簡單應用,借助于CGI技術實現(xiàn)了Web服務器和客戶端之間的動態(tài)交互,使得用戶能在網(wǎng)絡環(huán)境的多種平臺上充分利用統(tǒng)一的客戶工具——瀏覽器,從而為網(wǎng)絡化遠程操作提供了可靠保障。
 本文設計的嵌入式Web服務器利用以太網(wǎng)作為通信介質,具有最大的普及范圍;采用標準公開化的HTTP通信協(xié)議,獨立于系統(tǒng)平臺,在客戶端使用任意與Internet互連的標準PC(標準瀏覽器)可以實現(xiàn)隨時隨地訪問。所使用的Web架構獨立于系統(tǒng)平臺,可以移植到任何嵌入式設備中,使得該Web服務器具有通用性。經(jīng)實際測試證明,該Web服務器性能穩(wěn)定可靠,可應用在實時監(jiān)控、網(wǎng)絡電話等產(chǎn)品中。
參考文獻
[1] 田澤.嵌入式系統(tǒng)開發(fā)與應用[M].北京:北京航天航空大學出版社,2005.
[2] Microchip Technology Inc. Microchip TCP/IP 協(xié)議棧[EB/OL].http://ww1.microchip.com/downloads/en/AppNotes/00833c.pdf, 2008-08-21.
[3] 李勇.CGI技術在嵌入式WEB服務器中的應用和實現(xiàn)[J].網(wǎng)絡與通信,2008,24(30):110-111.
[4] 何克右.用CGI方式進行網(wǎng)頁交互[J].交通與計算機,2000,18(1):22-23.
[5] JEREMY B.嵌入式系統(tǒng)Web服務器—TCP/IP Lean[M].陳向群等譯.北京:機械工業(yè)出版社,2003.

此內容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉載。