APP下载

IOCP机制在交通信号控制系统通信服务器中的应用

2012-07-25树爱兵张雷元

微型电脑应用 2012年7期
关键词:顺序号交通信号信号机

树爱兵,徐 棱,张雷元

0 引言

交通信号控制系统作为城市交通管理系统的一个重要子系统,能够实时调整控制区域内的信号配时方案,均衡路网交通流运行,使停车次数、延误时间及环境污染等减至最小,充分发挥道路系统的交通效益,从而保证城市交通干线乃至整个城市交通路网的畅通、安全、高效运行[1]。通信服务器作为交通信号控制系统的重要组成部分,负责与路口信号机、用户监控终端及控制软件的数据通信及处理。通讯服务器必须能够保证长时间的为大量的信号机及终端软件提供信息通讯服务,因此,对于交通信号控制系统,经常遇到的问题就是通信服务器的多客户瓶颈问题,如何设计同时服务多个客户端,同时性能又比较高的通讯服务器,对于解决交通信号控制系统的性能和容量瓶颈问题势在必行。

Winsock 2.0引入的内核级高效处理机制IOCP(完成端口)是处理大量并发连接的最佳处理方案[2],相对于其他I/O模型,IOCP提供了较好的伸缩性和较高的数据吞吐率,能够满足通信服务器高性能的要求。本文基于IOCP机制设计了一种高性能的通信服务器,通过对其性能方面进行优化,极大地提高了交通信号控制系统通信服务器的性能和稳定性。

1 系统体系结构

交通信号控制系统主要由三层结构组成[3]:路口设备层,通信服务器层,监控终端层,如图1所示:

在整个系统中,路口设备层、通信服务器层、监控终端层中,通信服务器程序扮演着“代理”的角色,一方面接受来自路口设备的实时运行信息,并转发给监控终端层软件,另一方面接受来自用户终端的控制命令,并转发给路口层设备。

图1 交通信号控制系统结构

2 IOCP模型

IOCP模型是微软提供的用于异步处理各种I/O设备的一种机制,除了套接字句柄之外,还可接受其它东西。完成端口模型创建一个Windows完成端口对象,该对象通过一定数量的线程对重叠I/O请求进行管理,以便对已经完成的重叠I/O请求提供服务。IOCP模型,如图2所示:

图2 I OCP模型图

完成端口对象可以看作为一个系统维护的I/O完成队列,操作系统把已经完成的重叠I/O请求的通知放入其中,利用事先创建好的若干个工作者线程逐一从消息队列中取出消息并加以处理,它可以为任何用户的任何I/O 操作服务。完成端口是使用线程池的一种机制,只需少数几个线程就可以处理大量的I/O请求,避免CPU花费大量的时间在线程的调度上,提高了资源的利用率[4]。

3 基于IOCP的通信服务器设计与实现

交通信号控制系统通信服务器的核心功能,是将前端路口设备的信息发送给监控终端软件,并接受监控终端的命令,转发至路口设备执行。因此,在网络传输中,保证通信数据的快速性、准确性、可靠性是整个系统的关键。系统采用面向连接的TCP网络传输层协议,该协议具有拥塞回避机制以及超时和差错重传机制,确保了数据在传输中的流畅、完整和正确。

3.1 数据结构

1) 客户上下文信息结构

服务器监听线程在接受客户端连接时,将给其分配一个描述客户上下文信息的结构,一般包括客户端的套接字以及与该套接字相关的读写缓冲区等信息。具体结构定义如下:

2) 扩展的OVERLAPPED结构

当使用GetQueuedCompletionStaus函数检查消息队列时,其自身的OVERLAPPED 结构所表示的数据还不能满足传递数据的要求,应用程序不能确定完成的是哪个操作,因此,需在此基础上进行扩展,具体结构定义如下:

通过该扩展结构把重叠结构体的地址参数传递给异步I/O函数。该结构中的nSequencNumber参数和ClientSocketContext结构中的参数nCurrentSendSequence Number和nCurrentReadSequenceNumber是为了解决数据包中可能不按照正确顺序读写而设计的。

3.2 程序实现的流程

采用IOCP模型编写服务器程序主要包括两种类型的线程[5]:主线程和工作线程。主线程负责创建并监听套接字,创建工作线程,等待并接受客户端的连接,并将其关联到IOCP等。而工作线程则负责等待并处理在IOCP 对象上完成的事件。

IOCP通讯服务器工作流程,如图3所示:

图3 ICOP通讯服务器总体流程

图中实线由通信服务器程序完成,虚线由Windows操作系统进行处理, 不需要程序进行干预。

3.3 几个关键问题的优化设计

在采用 IOCP机制实现交通信号控制系统通信服务器时,会遇到许多棘手的问题[6][7],本文就其中3个关键问题进行讨论。

3.3.1 数据包重排序

IOCP通信服务程序使用多个工作线程来实现高性能和高并发性,因此异步I/O请求的线程与异步处理I/O完成的线程可能不是同一个线程,工作者线程的完成顺序是不确定的,也就是说先完成异步I/O的不一定先处理。当你通过投递发送请求到IOCP来发送数据时,待发送数据也被重新排序了。针对该问题,通过在缓冲类中增加读写顺序号,并按照顺序号来处理内存,如果顺序号相同,那么这个数据就可以进行处理,否则,需要将不正确顺序号的数据包进行缓存,直到之前的数据包处理完后才可以处理它。

3.3.2 异步读取和数据包处理

交通信号控制系统前端信号机在和中心通信服务软件通信时,按照预先定义的应用层协议进行数据通讯,每个数据表由消息头和消息数据组成,在消息头中定义了当前数据表的大小,标识等信息,接收方通过读取消息头得到该数据长度,从而来判断是否读数据表完成。由于IOCP 采用异步读操作,因此在同一个时间段内,接受到的数据包中可能包含一个或多个数据表,或者数据表的一部分。假设共有 3个数据包,这3个数据包中含有4个数据表,如图4所示:

图4 数据包和数据表

因此需编写专门的数据包解析函数,来获得完整的数据表。如果数据表完整,则解析出这个数据表进行相关处理,如果数据表不完整,则必须将其中不完整的数据表进行缓存,直到下一个顺序号数据表的到来,把先前缓存的数据和刚新接受的数据进行拼接,从而组成一个新的数据包,再进行解析。

3.3.3 无效的客户端连接

当前端路口信号机出现坏链接时,即路口设备和中心通信服务器建立 Socket连接后,既不发送数据,也不关闭连接,就会造成 Accept函数投递的大量重叠操作不能返回,此时通信服务器为了接受其它前端路口信号机的链接请求,需要投递更多接受I/O,占用大量的系统资源。为了避免此类事件的发生,通信服务器采用网络心跳检测包来解决这个问题,服务器每15秒向所有建立 Socket 连接的客户端信号机发送网络心跳检测包,客户端信号机在收到心跳检测包后,回送一个对应的网络心跳检测包,表明发送方仍然处于工作状态。如果客户端信号机连续3个心跳检测包都没有回应,此时通信服务器将关闭和此客户信号机的连接。

网络心跳检测包同样适用于检测通信双方是否非正常退出[8],如果在规定的时候内对方没有响应的话,通信的另一方就可以根据情况采取相应的措施。

4 仿真测试

基于以上设计思路建立系统软件,我们通过仿真信号机软件作为客户端,搭建仿真测试平台,对交通信号控制系统通讯服务器进行测试。

4.1 测试环境

1) 系统硬件环境:服务端采用IBM服务器,双核CPU 2.13GHz,4G内存;客户端为4台台式机,Pentium (R) 4 CPU 2GHZ,1G内存。

2) 网络环境:100M局域网络。

3) 系统平台环境:服务器操作系统为 Microsoft Windows 2003 Server,客户端操作系统为Windows XP。

4.2 测试方法

1) 测试软件:基于IOCP编写信号机客户端仿真软件,每台客户台式机上运行500个客户端软件,同时连接服务端软件。

2) 测试数据:信号机客户端仿真软件每2秒发送一条随机的检测器数据,同时不定时地发送信号机当前运行方案、信号相位、周期及心跳检测包等数据。

5 结束语

经测试验证,当通讯服务器同时连接2000个客户端连接时,CPU占用率平均稳定在 40%左右,其中每个路口信号机与服务器为一个连接,由于IOCP维护了一个先进先出的消息队列来处理服务,没有出现客户端信号机软件得不到服务的情况。测试结果表明:利用IOCP机制实现的通信服务器能够针对大量的客户请求进行高效处理,系统能够同时监控大量路口信号机的运行状态、检测器流量数据等任务,在速度和性能上体现出良好的特性,达到了系统设计的预期要求。

根据本文论述方法所设计的通信服务器,已经在多个城市交通信号控制工程得用应用,取得了良好的实施效果。

[1]杨佩昆,吴兵.交通管理与控制.[M]北京:人民交通出版社,2003.

[2]Anthony Jones、Jim Ohlund,Network Programming for Microsoft Windows,2nd Edition,[M]北京:清华大学出版社,2002

[3]树爱兵、苑雷、赵永进,城市交通信号干线协调控制系统研究,[j]中国交通信息产业,2009.1

[4]吴永明、何迪,基于完成端口的服务器底层通信模块设计,[j]信息技术,2007.3

[5]杜翔雷、跃明,基于IOCP 的服务器端应用程序,[j]计算机系统应用,2009.02

[6]Amin Gholiha,A simple IOCP server/client class,http://www.codeproject.com/KB/IP/ iocp_server_client.aspx,2008.12

[7]陈怀松、陈家琪,IOCP写服务程序时的关键问题研究,[j]计算机工程与设计,2010.17

[8]费绍敏、龚晓峰、卢海峰、袁洁,基于IOCP 的新闻交换平台的设计与实现,[j]控制管理,2009.4

猜你喜欢

顺序号交通信号信号机
关于参考文献著录格式
OKUMA MCR 系列加工中心ATC 故障修复
驼峰信号机与驼峰辅助信号机显示不一致问题分析
《城市轨道交通信号图册》正式出版
四显示自动闭塞通过信号机在TDCS/CTC采集电路中存在的问题及改进
《城市轨道交通信号设备》正式出版
城市轨道交通信号设备监测技术探讨
交通信号智能指挥模型
半自动闭塞总出发信号机非正常关闭解决方案
取消出站信号机“双绿”显示方式的探讨