电信动力监控中高性能TCP/IP通信设计及实现

2009-10-26 09:34曾冬梅王彦桂唐会天
电脑知识与技术 2009年22期
关键词:类库线程客户端

曾冬梅 王彦桂  唐会天

摘要:文章讨论了一个当前正在使用的新的电信公司动力与环境集中监控系统的原理和架构,并且详细讨论了在新的软件平台下为该监控系统设计以及实现一个高性能的TCP/IP通信库的方法和过程,使用该通信库可以非常容易给监控系统软件内部模块或与其他系统互联提供高性能的Sockets服务端和客户端功能。

关键词: Sockets; TCP/IP;.C#.NET; 通信; 电信; 动力监控;

中图分类号:TP319文献标识码:A文章编号:1009-3044(2009)22-pppp-0c

众所周知,电信公司的主要业务是提供7X24小时的不间断通信、数据服务,这些服务都需要依靠各种交换、路由、网桥和防火墙等设备完成,这些设备对于电以及动力设备的依赖尤胜于其他生产企业,而且这些通信设备运行的环境都有比较严格的要求,使用大量的人力进行现场维护,不但效率低下,也不能保证维护质量和维护水平,而动力及环境集中监控系统使得这一现状得到了彻底的改观,观察动力设备运行情况、记录设备及环境参数这些工作完全可以依靠监控系统来完成。广泛应用的动力及环境监控系统实现了对通信局站内各种动力设备、空调设备及环境的实时监控、维护和综合管理,保障了电信系统的可靠运行,降低了维护成本,并逐步实现了通信动力设备由分散维护向集中监控、维护和管理。

下面介绍的电信动力与环境集中监控系统使用了模块化和面向对象的设计,并且重点讨论了一个专门设计的TCP/IP通信库。

1 动力监控系统架构

一个完整的电信动力与环境监控系统应该包括配电系统设备、环境系统参数、消防系统信息和保安系统等数据,这些监控对象包括可以直接使用通信协议采集的所谓智能设备,也包括向温湿度传感器一样的非智能设备,对于不同的监控对象需要使用不同的数据采集前端设备,这些前端设备放置在被监控设备的附近或者通过现场铺设通信电缆进行数据采集。

当前以太网技术已经非常成熟,电信公司的DCN网络(专用数据通信网)是一个完全意义上的分组交换网络,TCP/IP协议在公司内和机楼之间都可以随处可用,所有数据通过前端采集设备采集后都可以通过TCP/IP网络进行传输。本系统整体的设计都基于电信完善的TCP/IP网络,系统以数据库为基础、以数据处理机为数据的中心,所有的监控段包括监控机和办公室都可以通过使用TCP/IP协议连接到数据处理机获得实时处理的监控数据,通过连接中心数据库获得保存的历史数据。

2 系统软件设计

监控软件功能模块以数据处理软件为实时数据分发中心,以数据库为历史数据存放中心。其余客户端软件都通过Sockets的方式连接到数据处理中心,数据处理中心作为Socket Server给其他客户端提供数据服务,客户端作为Socket client主动与中心建立连接,使用TCP/IP协议与中心进行通信。

3 通信库实现原理

在Windows操作系统下实现的TCP/IP通信程序,用户进程的每次网络访问都要通过操作系统来完成,Socke通信中发送方首先在用户空间将欲发送的数据准备好,通过系统调用进入核心,由核心将发送的数据从用户空间拷贝到核心空间,数据经TCP/UDP协议和IP协议处理,最后由网卡驱动程序发送到网络,当消息被接收方的网络接口卡收到后,产生硬件中断通知核心,接收方核心同样要经过IP协议和TCP/UDP协议的处理然后才能将数据拷贝到接收方进程的用户空间中。

除了操作系统负责完成的部分以为,用户程序还需要实现客户业务数据的调度,尤其对于服务程序需要建立一个高效的线程级的服务架构,因为服务程序需要实时响应很多监控客户端的同时数据请求。故很有必要专门为之设计一个高性能的TCP/IP通信库,用于实现高效的通信服务程序和通信客户程序。

这里设计的通信库基于TCP Client/TCP Server的通信模式,而不是Peer-to-Peer的通信模式。基于Client/Server通信模式需要至少完成两项任务:

TCP客户端负责发起一个与服务器的连接,因此客户端只需要关心并处理仅仅一个简单的向外的连接。

服务器端监听所有指向自己的客户端的请求,服务器端必须关心并处理多个向内的连接请求和向内的连接。

4 通信库设计实现

本系统的大部分软件都使用微软的新开发平台.NET进行开发,通信库也使用.NET平台下的C#语言进行设计和实现,可以供.NET平台支持的所有语言调用。

4.1 关键接口设计

基于.NET开发平台,在通信库中设计一个向外的连接类OutgoingConnection供客户端程序连接服务器程序使用。当客户端请求一个向服务器程序的连接时,服务器程序创建一个向内的连接类IncomingConnection的实例负责与客户端进行通信。OutgoingConnection类和IncomingConnection类都继承自同一个基础通信类ConnectionBase类,它提供了向内和向外通信相关的公共方法(如发送、接收数据等),都由接口ICommunicationsBase进行声明,这两个连接类共同实现的接口包含如下元素:一个Socket实例(发送和接收数据的管道);一个可以有管道接收到的新的数据触发的事件;一个可以通过管道与远程主机进行数据传输的方法;一个可以关闭Socket的方法。

客户端使用的OutgoingConnection类需要另外实现一些元素:一个连接方法(包含节点地址、端口参数)用来初始化与服务器的连接;三个线程:分别负责接收数据、发送数据和从数据流中提取数据。服务端使用的IncomingConnection类需要另外实现一些元素:一个类实例隶属的通信服务器指针实例;一个用来标识自己的ID编号;一个指向要发送的信息的接口IIncomingMessageHandler的实现。

几个关键的接口之间的关系如下,ICommunicationsServer包含了实现了接口ICommincomingConnection的类的多个实例,并且动态建立。

4.2 信息传输设计

动力与环境监控系统TCP/IP类库的核心功能就是在设备和系统之间、系统内部、系统之间高效、正确地传输实时信息,实时信息可以是一段打包的实时变化的字节流或者字符的集合,类库负责的内容就是保证打包发送信息,并且负责接收、解包信息,并保证发送的信息和接收到的信息完全一致。

通信类库提高性能的第一步是合理的利用多线程技术,监听、接收、发送都使用单独的线程,以有效的利用CPU时间并且不会互相影响和造成不合理的等待。

类库设计了一个线程安全的类SendReceiveBuffer作为发送的信息缓冲区,缓冲区中的字节等待被发送或被处理,使用线程安全的队列保存缓冲区数据。提供发送性能的关键在于减少少量字节的多次发送,将需要发送的多个少量字节预先保存在队列缓存中,发送时可以合并成单个的TCP/IP包进行发送以提供效率。

通信库中另一个提高通信性能的方法是使用非阻塞模式,因为非阻塞模式在发送和接收是不需要等待,可以立即进行下一次接收和发送,而阻塞模式将使得当前线程进入等待直到发送或接收完成。尤其在通信库的服务器端性能的提高将非常明显,因为在有大量的数据等待发送到大量的客户端时,非阻塞模式可以立即进行下一个客户端的发送和接收。

5 结论

文章介绍的电信动力与环境集中监控系统已经在电信公司实际运行,获得了良好的效果。系统采用了新的软件平台,并且使用了专门设计的高性能TCP/IP通信库,经过测试,可以支持100个以上的监控客户端没有明确的通信滞后,表现了良好的性能,也有一定的通用性。

参考文献:

[1] Christian Holm, Mike Kruger等. C#软件项目全程剖析[M]. 北京: 清华大学出版社, 2003: 13-36.

[2] 严蔚敏, 吴伟民. 数据结构:[M].北京:北京: 清华大学出版社,1997.

[3] Ivar Jacobson, Grady Booch 等.统一软件开发过程 [M].北京:机械工业出版社,2002.

[4] Erich Gamma, Richard Helm.设计模式 [M].北京:机械工业出版社,2000:54-91.

[5] 刘险峰,倪涉权. 蓄电池容量在线监测研究[J].通信电源技术, 2009(5): 51-54.

[6] 王彦桂,郁 滨等. 配电自动化系统中应用DNP3.0协议进行数据通信[J].计算机自动测量与控制, 2001(T):99-101.

[7] 郝燕玲,赵玉新等. 基于事件交互树模型的GUI测试技术[J].应用科技, 2009(5):61-65.

猜你喜欢
类库线程客户端
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
浅谈linux多线程协作
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
客户端空间数据缓存策略
Linux线程实现技术研究
么移动中间件线程池并发机制优化改进