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

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

2.3 數據發送層
網絡數據發送層根據用戶的設置將封裝層的數據包發送到中心服務器,其發送過程,如圖3所示。在這層解決3個問題:用戶隊列管理、非阻塞發送、鏈路狀態監測。

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

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