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