轻量级高性能网络通信组件的研究及应用
2016-12-06李景波刘中华
李景波 刘中华
(海军潜艇学院,山东 青岛 266000)
轻量级高性能网络通信组件的研究及应用
李景波 刘中华
(海军潜艇学院,山东 青岛 266000)
针对当前联网软件开发过程复杂、网络框架程序庞大、开发成本大等问题,在Windows开发平台中Socket通信基础上,提出了一种轻量级的高性能网络通信组件Isocket。采用了IOCP作为开发服务端,EventSelect作为开发客户端,简化了原有网络框架结构,设计了Agent组件,提供了客户端与服务端的接口服务,并基于Eventselect模型,设计API接口,增加了程序整合的适用性,实现了网络框架底层通信的完整封装,为增加软件开发通用性,减少开发人员学习成本与开发难度提供了新的简化方法。
通信组件;网络框架;Windows开发;通信接口
1 引言
现代生活中,网络技术应用已经普及到生活中的各个角落,应用程序的开发也与网络紧密相连,越来越多的软件需要使用联网功能。目前软件的联网部分的程序开发具有过程复杂、网络框架庞大、通信协议种类不统一等特点,改善软件网络通信开发过程是当前软件开发方向的重要研究方向。近年来,宽带业务与无线网络业务的迅速普及也对软件通信网络框架的大连接与并接处理能力提出了进一步的要求,针对典型的C10K问题,单纯的I/O复用解决方案已无法适应日益增长的硬件网络发展,因此研究一种轻量级的高性能网络通信组件对于简化软件网络架构,增加软件开发通用性具有重要作用。本文在Windows开发平台中Socket通信基础上,提出了Isocket网络通信组件,开发了组件的服务端与客户端,设计了Agent接口组件,并基于Eventselect模型,设计API接口,增加了程序整合的适用性,实现了网络框架底层通信的完整封装,简化了网络开发程序,增强了软件的网络通信应用性。
2 相关技术简介
TCP通信协议:TCP协议是一种可靠的面向连接的传输控制协议,该协议采用重发定时器机制保证数据传输的准确性,采用数据包帧序号机制避免数据丢失,并在数据传输结束后采用校验和函数验证数据是否传输正确[2]。
UDP通信协议:UDP协议是一种实时传输协议,该协议具有较好的实时性,但其数据传输完整性较低,适用于实时通话、视频等情景。
Socket接口:Socket提供TCP/IP协议的应用程序编程接口(API),该接口预先定义了许多函数,可供编程人员参考,其数据结构通常包含:进程通信协议、客户端协议地址及协议端口、服务端协议地址及协议接口三大部分,客户端与服务端通过创建Socket并发送、接收请求实现通信[3]。
WSA Event select网络编程模型:WSA Event select是Winsock函数的异步事件通信I/O模型,在该模型中事件通知对象为句柄,简化了程序结构,增加了程序的灵活性。
IOCP网络编程模型:IOCP是一种基于Winsocket2的性能较高的I/O模型完成端口,可高效处理多客户端数据通信问题[4]。
3 ISocket通信组件网络架构
本文设计的ISocket通信组件适用于TCP/UDP通信模式,可实现软件轻量级、高性能的网络通信,该通信组件可面向不同的编程语言(包括C/C++、C#等开发语言),其构成包括Client组件、Sever组件、Agent组件,其中,Sever组件以IOCP模型为构建基础,Agent组件以Event select模型构建,ISocket具有通用性、易用性、高性能、伸缩性等特点。
3.1 API接口
Isocket通信组件提供方便用户使用的应用程序编程接口(API),该接口可实现软件的高速通信,减少了开发人员编程负担,缩短了客户等待时间。
本文设计API接口模型如图1所示:
图1 ISocketAPI接口模型
Isocket定义的各类组件功能如图2所示:
图2 Isocket各类组件功能
3.2 组件与应用程序交互流程
ISocket组件对象与程序监听器对象关联,应用程序通信请求可通过组件对象传递并通过监听器对象回传通信请求进程。下面我们以TCPAgent组件与监听器为例分析ISocket组件与应用程序的通信过程:
通信请求触发后——创建Agent与Listener对象——通过Start/connect/close等方式操作TCPAgent——通过onstart/ onconnect/onclose等方式回传监听器对象工作方式——应用程序接收。
ISocket组件可通过选择Connection Extra与信号接收方式减少程序潜在的多线程及使用锁等问题。
图3 TCPAgent与监听器交互流程示意图
3.3 组件接口定义
ISocket服务器(Server)组件、客服端(Client)组件、代理(Agent)组件及监听器接口定义均包括组件定义函数名称、函数模型、操作方法、变量类型等内容,图4为Server监听器接口定义。
图4 Server监听器接口定义
在通信事件传输过程中,常采用返回值状态字EnHandleResult的状态确定事件通信结果:如果该状态字返回值为HROK,则表示事件成功处理;如果该状态字返回值为HRINGO则表示事件被忽略;如果该状态字返回值为HRERR,则表示事件处理失败。
4 系统实现的关键性技术
4.1 私有堆封装方法
私有堆是一种在Windows开发平台中减少调用new/ malloc的竞争方法,它对于提高程序具有重要作用,具体优点有:解决多线程函数调用内存占用问题;减少多线程地址冲突问题;有利于实现程序模块化;内存清理更方便。API接口的私有堆程序主要有以下几种:HCreate(),HDestory(),HAlloc(),Hsize(),HFree()等。本文针对面向C语言的API接口在PHeap.h与PHeap.cpp设计了两类封装模型,分别为:CPHeap与CPHeapBuffer<T>,其中CPHeap为周期较长的私有堆进程,CPHeapBuffer<T>为私有堆内存处理对象,可实现函数内部内存的分配与释放。
4.2 缓存池
缓存池是指为程序预先调用的内存空间,用于应用程序通信时储存数据,减少了向计算机CPU请求内存时间,提高了程序运算速度。缓存池的实现是通过TItem、TItemList结构体与CIItemPool类等模块实现。
TItem可实现内存空间的管理,并通过函数CPHeap实现私有堆空间的管理,常用的函数有:Catch()、Fetc()、Reset()等。
TItemList是实现TItem管理的双向队列,常用的函数及定义为:
PushFront();从数据队列的前部提出TItem;
PushBack();从数据队列的后部提出TItem;
PullFront();从数据队列前部插入TItem;
PullBack();从数据队列后部插入TItem;
CIItemPool实现TItemList队列维护,并监管TItem部分对象,其在缓存池中的作用流程如图5所示:
图5 CIItemPool作用流程
4.3 断线重连
程序中Listener事件常在通信进程中触发,当通信线路断开时无法通过通用的重连函数Start()/Stop()实现通信重连,针对ISocket通信组件,本文采用以下两种方法实现通信过程中的断线重连:
(1)设计监测进程实时监控通信对象GateState()状态,当出现断线或错误状态时重新激活对象连接。
(2)设计定时器,通过周期性查询GateState()状态,当检测到数据错误或停止传送时,重新激活对象连接。
5 性能测试
本文采用第三方测试软件TCPUDPPerformanceTest对ISocket通信组件进行大批量并发测试,通过设置测试条件、通信线路数、数据传送格式等参数对本地网络通信服务进行测试,其测试结果如图6所示。
图6 多连接数测试结果
由测试结果可知,服务器在多连接数情况下数据发送与接收情况通信运行良好,保持了较高的通信速度。
6 结论
本文针对当前联网软件开发过程复杂、网络框架程序庞大、开发成本大等问题研究了一种高性能网络通信组件ISocket,设计了Agent组件,提供了客户端与服务端的接口服务,并基于Eventselect模型,设计API接口,增加了程序整合的适用性,研究了实现通信组件的关键性技术,并采用第三方软件对组件通信效果测试,验证了组件的应用效果。
[1]成卫青,王雪梅,豆仁福等.三种基本网络传送模式的编程实现与分析[J].计算机技术与发展,2011,21(7):133.
[2]刘珍阳,宋刈非,张蕊.基于IOCP的高性能服务器软件设计[J].计算机与数字工程,2013(07):1155.
[3]池俐英.网络组件间协调效用机制研究[J].电脑知识与技术,2011,07(29):7099.
[4]丁志耀.网络游戏服务端设计化[J].电子技术与软件工程,2013 (02):31.
[5]蔡晨曦,秦会斌.基于IOCP模型的多仪器数据采集与控制系统[J].无线电通信技术,2015(05):44-46.
Research andApplication of Lightweight High Performance Network Communication Component
Li Jingbo Liu Zhonghua
(PLANavy SubmarineAcademy,Qingdao 266000,Shandong)
The current network software development has the problems of complex process,large network framework procedures,and large development costs.Based on the socket communication on the windows platform,this paper puts forward a lightweight high performance network communication component Isocket.It uses IOCP as the server-side,and EventSelect as the clientside,simplifying the original network framework.It designs the Agent component,providing interface service for the client and server.It designs the API interface based on Eventselect model,increasing the applicability of procedures integration,achieving a complete package of the communication of underlying network framework.It provides a new simplified method to increase the universality of software development and reduce the learning cost and development difficulty for developers.
communication component;network framework;Windows development;communication interface
TP311.52
A
1008-6609(2016)08-0045-03
李景波,男,山东滨州人,本科,工程师,研究方向:网络通信应用。