文/周丽丽 秦贺伟 赵时轮
随着信息系统规模的不断扩大,信息系统间实时数据共享的数据量也在不断上升,继而对支撑信息系统运行的通信服务性能也提出了更高的要求。
本文提出了面向实时数据流的高效通信服务系统,作为信息交换的底层系统软件,支持大型复杂信息系统网络层的数据交互,能在高并发网络环境下提供实时、高效的数据转发服务,能够有效解决通信服务系统面临的并发访问链接数量大、数据交换信息流量大等实时处理的关键问题,对相关信息系统的开发具有一定的参考意义。
面向实时数据流的高效通信服务系统,在其实现形式上,是一个典型的CS软件系统体系结构,由通信服务客户端、通信服务端和管理端三部分组成,图1给出了高效通信服务系统的主要组成。
通信服务客户端部署于各应用系统,为其提供网络通信能力。管理端是监控通信服务运行情况的管理程序。通信服务端的主要组成包括:
(1)逻辑管理层:由监控管理、主题管理和链接管理三个子模块组成。监控管理模块按照约定协议向管理端上报服务端状态信息;主题管理负责域内客户端的通信主题维护和通信主题匹配;链接管理用于维护服务端与客户端之间的通信链接。
(2)数据管理层包括:由数据队列管理、线程池管理和内存管理三个子模块组成。数据管理层为逻辑管理层提供数据管理支撑。
(3)通信子层包括:将底层网络通信接口进行封装,对数据管理层提供高效的网络数据传输支撑。
为保证通信服务端的实现性能,在Windows系统平台下选择完成端口(Completion Port)Socket I/O模型,以提升高速CPU和慢速I/O设备(网络适配器)间的高效协调。
表1:实验测试结果表(a)
表2:实验测试结果表(b)
采用IOCP模型编写服务程序主要包括两种类型的线程:主线程和工作线程。主线程负责创建并监听套接字,创建工作线程,等待并接受客户端的连接,并将其关联到IOCP等,而工作线程则负责等待并处理在IOCP 对象上完成的事件。
基于IOCP模型编写的服务端工作流程如图2所示。
(1)对网络进行初始化,并设置Socket版本号;
(2)创建一个I/O完成端口,为完成端口分配套接字句柄,并对端口进行标识;
天上有两三颗星星,林内幽暗,我们捉迷藏,吹竹叶,她还要我在竹梢上施展轻功奔跑……吃过饭,她找了块地,说:“今晚就睡这。”
(3)准备好一个监听套接字,并创建监听线程,开始监听网络上客户端的连接请求;
(4)创建工作线程池,当有客户端请求连接时,主线程建立新的连接,为新连接的客户端建立上下文信息,并将该客户端套接字句柄关联到完成端口,然后投递一个异步的收发调用;
(5)工作线程循环获取消息队列状态,从客户上下文信息中获取与Socket相关的上下文信息,判断消息状态,取得要操作的数据内容;
(6)主程序继续下一个循环,等待新的客户端连接;
(7)Windows操作系统内核完成收发操作,并将结果发送到完成端口;工作线程对数据进行处理,然后提交下一个操作请求,继续下一次循环并阻塞获取消息队列状态;
(8)重复步骤(5)至(7),直至服务端程序退出。
公共接口类的主要接口包括:客户端类和主题类。客户端类主要接口内容为客户端初始化、客户端退出、与服务端建立连接、向通信服务发送数据和检查客户端状态等。主题类主要接口内容为发布主题、取消主题、订阅主题和取消订阅主题。
图1:系统组成示意图
图2:服务端工作流程图
数据接口类主要接口内容为:设置接收对象、设置重连间隔、设置客户端缓冲区大小、绑定客户端地址和接收数据等。
面向实时数据流的高效通信服务系统,实现了数据发送端与数据接收端的松耦合关系,支持点对点传输和发布订阅传输两种传输模式,传输应用流程如图4所示。
在点对点传输模式下,数据发送端发送的数据仅可被一个数据接收端处理。在发布订阅传输模式下,一个客户端应用发布数据,一个或多个客户端应用订阅数据;发布的数据副本会被与订阅主题匹配的一个或多个订阅应用收到,服务端基于主题将数据转发至订阅该主题的客户端。
实验环境包括1台运行通信服务端的服务器、5台运行通信客户端的计算机和1台48口千兆交换机。其中服务器的配置为:处理器Intel(R) Core(TM) i7-4790 CPU @3.6GHZ*8,内存8G,双千兆网卡,Window 7 专业版。实验从客户端接入数量、主题申请数量两个维度,对数据吞吐量、数据转发延迟和传输丢包率3项指标进行了分析测试,测试结果如表1和表2所示。
本文介绍了面向实时数据流的高效通信服务系统的设计和实现,能够满足高并发、大流量的实时数据通信,通过系统实现,简化了应用客户端通信实现和管理的难度,为信息系统间互联提供了具备灵活性和扩展性特点的通信手段。经实验验证,系统运行高效、稳定,可为信息系统通信服务的设计实现提供借鉴。
图3:通信客户端类图
图4:数据传输应用流程图