一種實用的嵌入式Web服務器設計
2 功能實現
2.1 HTTP連接管理的功能實現
所謂HTTP連接管理,主要是指對連接到服務器端口的socket進行監聽、捕獲、讀寫、關閉,以及對HTTP請求報文協議字段的解析和響應報文的生成等操作。其中,BOA可提供完整的HTTP協議數據解析及響應報文生成的功能。因此,對和HTTP連接管理中相關的操作,基本上可直接采用BOA的相關代碼,實現起來難度不大。
BOA中的連接狀態切換示意圖如圖3所示。本文引用地址:http://www.104case.com/article/149122.htm
當程序每次監聽到新的socket連接訪問接入時,首先對空閑隊列進行判斷,如果為空,則申請一個request結構空間,并將其插入就緒隊列的隊頭,否則可直接將一個結構空間從空閑隊列轉入;對當前正在處理的就緒隊列成員,當網絡阻塞時則將其移入阻塞隊列的隊頭,當訪問結束斷開連接時,則將該成員的空間信息移入空閑隊列;而當對阻塞隊列進行輪詢時,根據其成員所對應的socket上是有讀寫請求還是該連接已超時,分別將其移入就緒隊列或斷開連接移入空閑隊列。
以上過程在BOA中主要是通過get_request、fdset_update和process_requests這三個函數來實現的,它們也是實現移植的重點,其他函數則相對簡單。在移植過程中,為了適應嵌入式的應用環境,在系統初始化時,給空閑隊列分配了足夠大的隊列空間,并對操作時所涉及的一些動態內存分配的語句和結構進行修改,從而盡量減少連接過程中頻繁的內存申請。另外,傳統的BOA對每個CGI連接啟動新的任務,在此考慮到配置數據的即時生效以及系統資源的節約,仍然在EWS的任務環境中處理該CGI連接。實驗證明,這種處理方法簡單可行,而且在裝置的應用環境中對服務器的性能并無太大影響。
2.2 訪問權限管理的功能實現
為了應用時操作的安全性,本文將訪問的頁面分成兩類:一類為配置操作頁面,儀供認證用戶訪問;另一類為設備狀態頁面,可供任何用戶訪問。其控制主要是通過對用戶IP的判別及訪問頁面的分類來實現的。首先對用戶訪問的URL進行解析,如果訪問對象為配置操作頁面,則需要進行認證,在此通過一個用戶權限控制管理結構來對通過權限認證的用戶進行維護,并提供一個時間摔制機制,使通過認證的用戶在一定時間段內可持續有效的對服務器進行訪問。如果當前客戶端(訪問者IP)在用戶權限控制結構內,且未超時,則通過認證,由服務器根據本次申請的URL返回相應頁面;若超時則需要對本次訪問的URL進行重定向,返回密碼校驗頁面,給用戶提供密碼輸入的接口。如果訪問頁面為設備狀態頁面,則無需進行認證,直接由URL返回相應頁面即可。訪問權限認證程序流程如圖4所示。
評論