基于uClinux的实时网络监控服务器开发与应用
摘要:介绍了一种基于uClinux的实时网络监控服务器开发方法,该服务器能对实时对远程网络终端、监控摄像头等进行控制管理和数据访问。将其应用到大型网络监控系统中,用户可访问由多台服务器组成的分布式网络监控服务器集群,实时读取数据然后将其存写到大容量存储设备中,增加并发式连接的用户数量,提高远程实时网络监控系统稳定性和可靠性。
本文引用地址:http://www.amcfsurvey.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 结束语
将本设计网络监控服务器应用于分布式网络监控系统,网络摄像头通过该系统监控被管对象,对数据进行分发和控制管理,还可将这些数据写入存储服务器,供用户以后调取。将设备部署于拥有用庞大分支机构的机关事业单位及大中型企业的网络监控系统中运行测试,在多用户网络监控系统中,该设备在分布式实时网络监控系统中运行稳定可靠,提高了网络监控系统整体性能。
评论