基于uClinux的實(shí)時(shí)網(wǎng)絡(luò )監控服務(wù)器開(kāi)發(fā)與應用
摘要:介紹了一種基于uClinux的實(shí)時(shí)網(wǎng)絡(luò )監控服務(wù)器開(kāi)發(fā)方法,該服務(wù)器能對實(shí)時(shí)對遠程網(wǎng)絡(luò )終端、監控攝像頭等進(jìn)行控制管理和數據訪(fǎng)問(wèn)。將其應用到大型網(wǎng)絡(luò )監控系統中,用戶(hù)可訪(fǎng)問(wèn)由多臺服務(wù)器組成的分布式網(wǎng)絡(luò )監控服務(wù)器集群,實(shí)時(shí)讀取數據然后將其存寫(xiě)到大容量存儲設備中,增加并發(fā)式連接的用戶(hù)數量,提高遠程實(shí)時(shí)網(wǎng)絡(luò )監控系統穩定性和可靠性。
本文引用地址:http://dyxdggzs.com/article/201610/307877.htm關(guān)鍵詞:uClinux;實(shí)時(shí);網(wǎng)絡(luò )監控;分布式;并發(fā)
網(wǎng)絡(luò )監控服務(wù)器在網(wǎng)絡(luò )監控系統中負責數據的采集、壓縮及發(fā)送,是系統中不可或缺的后臺設備。常用的工作模式是將監控服務(wù)器作為獨立設備,直接與終端用戶(hù)交互,用戶(hù)通過(guò)播放器直接從監控服務(wù)器獲取數據及修改配置參數,每個(gè)服務(wù)器所能承的用戶(hù)數較少,不能滿(mǎn)足多用戶(hù)并發(fā)控制服務(wù)。而在大型網(wǎng)絡(luò )監控系統應用中,多個(gè)監控服務(wù)器簡(jiǎn)單疊加而成的服務(wù)器組,并將它們組成分布式網(wǎng)絡(luò )服務(wù)器集群,增加可以同時(shí)服務(wù)的用戶(hù)數,提高遠程實(shí)時(shí)網(wǎng)絡(luò )監控系統穩定性和可靠性,并對用戶(hù)的訪(fǎng)問(wèn)權限進(jìn)行管理與控制。本用戶(hù)可以通過(guò)分布式網(wǎng)絡(luò )監控系統管理被監控對象。獲取權限訪(fǎng)問(wèn)網(wǎng)絡(luò )監控服務(wù)器讀取數據,并將其存寫(xiě)到大容量存儲設設備或系統中。
1 總體設計
網(wǎng)絡(luò )監控服務(wù)器采用Motorola ColdFire5272作為核心微處理器,它具有66 MHz的時(shí)鐘速度,內部集成了2個(gè)串口控制器和一個(gè)以太網(wǎng)控制器??焖僖蕴W(wǎng)媒體存取控制(MA C),支持100Mbps MII,10Mbps MII和10Mbps7線(xiàn)實(shí)際接口符合USB1.1標準,可操作內外收發(fā)器的設備控制器(devicecontroller)。時(shí)分多工(TDM)控制器,可使產(chǎn)品以物理級水平與外部編碼、ISDN收發(fā)器以及其它使用GCI(General Circuit Interface)或IDLI(Inter Chip Digital Link)串行接口協(xié)議的外圍設備連接。多信道HDLC軟件模塊QSPI模塊,提供帶有序列傳輸性能的串行外圍接口用于控制應用的脈沖寬度調制(PWM) 單元。同時(shí)還提供許多嵌入式應用產(chǎn)品所共有的外圍產(chǎn)品,如SDRAM控制器、DMA、計時(shí)器、UART、芯片選擇、通用I/0、片上存儲以及 ColdFire除錯模塊,所有這些都采取高效節省的方式,減少系統成本、加速系統設計。Linux是一個(gè)免費開(kāi)源、微內核的操作系統,支持數十種MPU 及其硬件平臺,對TCP/IP協(xié)議支持最完備,可提供穩定可靠的數據處理與網(wǎng)絡(luò )通信服務(wù)。uCLinux是一種優(yōu)秀的嵌入式Linux版本,它專(zhuān)門(mén)針對微控制領(lǐng)域而設計,廣泛應用于服務(wù)器領(lǐng)域。本項目設計的多媒體服務(wù)器在嵌入式Linux操作系統上開(kāi)發(fā)與運行,設計出來(lái)的程序代碼具有良好的可復用性。與其他操作系統平臺上的同類(lèi)設備相比,在以后二次開(kāi)發(fā)及成本價(jià)格上都極具競爭力。多媒體服務(wù)器的功能模塊結構,如圖1所示。

2 功能實(shí)現
網(wǎng)絡(luò )監控服務(wù)器根據用戶(hù)的配置以Pull和Push兩種方式發(fā)布數據。用戶(hù)在數據發(fā)送過(guò)程中修改參數,需要和配置服務(wù)通信來(lái)獲取參數修改的標志。網(wǎng)絡(luò )監控服務(wù)器與客戶(hù)端每次建立多個(gè)會(huì )話(huà)連接。為了增加程序的可讀性、可移植性,根據數據的流向將整個(gè)軟件分為3層,分別是驅動(dòng)層、數據封裝層和網(wǎng)絡(luò )發(fā)送層。
2. 1 驅動(dòng)層
驅動(dòng)層負責管理壓縮電路,配置壓縮參數,啟停壓縮,包括用戶(hù)層和底層硬件的通信。驅動(dòng)層的數據管理使用循環(huán)隊列,重復使用相同的空間,隊列的長(cháng)度是可以改變的,初始讀寫(xiě)指針都指在0位置,當隊列長(cháng)度改變時(shí),放棄所有未用數據,指針重新指向0。當讀指針遇上寫(xiě)指針時(shí),說(shuō)明隊列空,此時(shí),掛起讀進(jìn)程,直到有數據時(shí)再在中斷的低半層喚醒它。內核數據和用戶(hù)數據之間的傳送通過(guò)mmap系統調用,由用戶(hù)層申請內存空間映射到內核中。驅動(dòng)層主要有4個(gè)重要的子模塊:初始模塊,命令處理模塊,中斷響應模塊,數據傳輸模塊。
1)初始模塊注冊字符設備;映射IME6400地址空間,設置相應的片選寄存器的數值,時(shí)序;注冊中斷響應函數;初始化數據結構。
2)命令處理模塊置位IME6400設備,在程序第一次使用設備的時(shí)候使用,或者需要更新firmware的時(shí)候先置位一下。實(shí)現以下主要命令:
3)中斷響應模塊從IME6400的FIFO寄存器中讀取1024字節的流數據。依次填入循環(huán)緩沖隊列,移動(dòng)寫(xiě)指針;管理緩沖隊列,如果有足夠的數據,喚醒讀進(jìn)程。
4)數據傳輸模塊如果有足夠的數據則讀取數據,移動(dòng)讀指針。否則讀進(jìn)程掛起,等待喚醒。
為了增加驅動(dòng)程序的可用性,在底層驅動(dòng)的基礎上增加一個(gè)用戶(hù)驅動(dòng)層,把對驅動(dòng)程序的調用封裝成一個(gè)個(gè)獨立的函數,這樣可以增加程序的可讀性和獨立性。用戶(hù)層驅動(dòng)還有一個(gè)重要的功能就是管理用戶(hù)數據緩存區,從內存出來(lái)的數據經(jīng)過(guò)處理按幀為單位形成一個(gè)數據幀隊列,每個(gè)通道一個(gè)隊列。數據幀隊列的長(cháng)度是可配置,數據發(fā)送太慢的時(shí)候,應該有相應的刪除多余幀的方法。包括刪除一個(gè)序列的p幀、刪除最早的I幀和相應的p幀序列、只保留音頻幀。所采用的方法由網(wǎng)絡(luò )發(fā)送情況決定,當網(wǎng)絡(luò )狀況差的時(shí)候,只發(fā)送音頻數據。
2.2 數據封裝層
數據封裝層負責將從驅動(dòng)層采集到的數據進(jìn)行格式封裝,管理等待數據隊列,填充數據包頭,根據網(wǎng)絡(luò )情況丟棄部分數據。實(shí)現的方法有單線(xiàn)程和多線(xiàn)程兩種。
1)單線(xiàn)程的方法
單線(xiàn)程實(shí)現比較簡(jiǎn)單。主體的過(guò)程是一樣的,可以把數據采集和分析封裝都放在一個(gè)循環(huán)中,每一次循環(huán)都做一次數據采集、封裝和發(fā)送,這樣任何一個(gè)層都應該是不阻塞的。但是這種方式的缺點(diǎn)是,任何一步都不能阻塞,實(shí)際上封裝發(fā)送都是需要一定時(shí)間的,這樣采集數據就不會(huì )很及時(shí),效率不夠高。程序模塊劃不清晰,一個(gè)小改動(dòng)都會(huì )導致其他部分的較大修改,不利于模塊化設計、修改和移植。
2)多線(xiàn)程的方法
在主程序中建立兩個(gè)線(xiàn)程:User Driver Thread和DataPactct Thread。UserDriverThread運行在用戶(hù)驅動(dòng)層,負責收集數據,管理等待隊列。DataPactctThread運行在數據封裝層,從等待隊列中取出的數據經(jīng)過(guò)解析以后封裝后發(fā)送出去。這2個(gè)相鄰上下層線(xiàn)程之間相互通信過(guò)程,如圖2所示。在線(xiàn)程DataPactctThread中,數據分析器對象主要處理兩個(gè)對象,一個(gè)是屬于用戶(hù)驅動(dòng)層的數據隊列,另外一個(gè)是發(fā)送層的發(fā)送器對象。實(shí)際上封裝層的任務(wù)就是把隊列中的數據去出來(lái),分析以后填充包頭信息,交給下一層的發(fā)送層,數據根據不同對象分開(kāi)發(fā)送,在發(fā)送層中采用不同的發(fā)送策略。

2.3 數據發(fā)送層
網(wǎng)絡(luò )數據發(fā)送層根據用戶(hù)的設置將封裝層的數據包發(fā)送到中心服務(wù)器,其發(fā)送過(guò)程,如圖3所示。在這層解決3個(gè)問(wèn)題:用戶(hù)隊列管理、非阻塞發(fā)送、鏈路狀態(tài)監測。

1)用戶(hù)隊列管理對于PULL方式,需要有對用戶(hù)等待隊列的管理。這種方式相對簡(jiǎn)單,只需根據配置將數據發(fā)送到中心服務(wù)器或者發(fā)給本地瀏覽的用戶(hù)。在PULL發(fā)布方式時(shí),同時(shí)支持多個(gè)用戶(hù)的在線(xiàn)瀏覽,這樣必須對用戶(hù)隊列進(jìn)行管理,在播放器中有一個(gè)KEEP ALIVE機制,當5秒鐘沒(méi)有受到播放器的保持數據包,就認為用戶(hù)已經(jīng)離開(kāi),為了實(shí)現這樣一個(gè)機制,在等待隊列中的每一個(gè)用戶(hù)設置一個(gè)Count屬性,當達到一定數值的時(shí)候,將用戶(hù)刪除。
2)非阻塞發(fā)送在單線(xiàn)程中任何一個(gè)操作阻塞都會(huì )對其他操作造成問(wèn)題,特別是在網(wǎng)絡(luò )發(fā)送時(shí),無(wú)論是使用TCP還是UDP都要使用非阻塞的操作。特別是使用TCP傳送的時(shí)
候,除了設置套接字的非延遲屬性之外,還要實(shí)現非阻塞連接。
3)鏈路狀態(tài)監測為了適應比較惡劣的網(wǎng)絡(luò )狀況,在用戶(hù)驅動(dòng)層應該實(shí)現一定的丟包策略,發(fā)送層必須把統計的網(wǎng)絡(luò )狀況傳遞給用戶(hù)驅動(dòng)層。網(wǎng)絡(luò )鏈路出現輕度阻塞時(shí),要丟棄最近的P幀序列,網(wǎng)絡(luò )狀況正常的時(shí)候再恢復;嚴重阻塞時(shí)只發(fā)送音頻幀。
3 系統應用構建
將網(wǎng)絡(luò )監控服務(wù)器部署在分布式網(wǎng)絡(luò )監控應用系統中,如圖4所示,用戶(hù)通過(guò)分布式網(wǎng)絡(luò )監控系統實(shí)時(shí)訪(fǎng)問(wèn)被監測對象,對數據進(jìn)行分發(fā)和控制管理,獲取實(shí)時(shí)數據,并存寫(xiě)進(jìn)存儲服務(wù)器。經(jīng)實(shí)驗測試,在此多用戶(hù)分布式網(wǎng)絡(luò )監控系統應用測試環(huán)境中,該服務(wù)器能實(shí)現7×24小時(shí)穩定可靠運行,相比以往使用非實(shí)時(shí)非并發(fā)的網(wǎng)絡(luò )監控服務(wù)器,提高了網(wǎng)絡(luò )監控系統整體性能。

4 結束語(yǔ)
將本設計網(wǎng)絡(luò )監控服務(wù)器應用于分布式網(wǎng)絡(luò )監控系統,網(wǎng)絡(luò )攝像頭通過(guò)該系統監控被管對象,對數據進(jìn)行分發(fā)和控制管理,還可將這些數據寫(xiě)入存儲服務(wù)器,供用戶(hù)以后調取。將設備部署于擁有用龐大分支機構的機關(guān)事業(yè)單位及大中型企業(yè)的網(wǎng)絡(luò )監控系統中運行測試,在多用戶(hù)網(wǎng)絡(luò )監控系統中,該設備在分布式實(shí)時(shí)網(wǎng)絡(luò )監控系統中運行穩定可靠,提高了網(wǎng)絡(luò )監控系統整體性能。
評論