基于uClinux的实时网络监控服务器开发与应用
列的长度是可配置,数据发送太慢的时候,应该有相应的删除多余帧的方法。包括删除一个序列的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 结束语
将本设计网络监控服务器应用于分布式网络监控系统,网络摄像头通过该系统监控被管对象,对数据进行分发和控制管理,还可将这些数据写入存储服务器,供用户以后调取。将设备部署于拥有用庞大分支机构的机关事业单位及大中型企业的网络监控系统中运行测试,在多用户网络监控系统中,该设备在分布式实时网络监控系统中运行稳定可靠,提高了网络监控系统整体性能。
- 多线程技术在数据实时采集分析中的应用(06-28)
- 陶瓷驱动器电压实时监测系统设计(02-04)
- Maxim DS3231实时时钟应用笔记、使用指南、FAQ全集(02-14)
- 半导体行业中十款主流实时时钟(06-29)
- 基于SoC的实时信号处理系统中存储系统的容错设计(04-20)
- 实时时钟电路设计(05-20)