APP下载

C/C/S模式实时通信软件设计与实现

2010-09-05爽,云

大连民族大学学报 2010年5期
关键词:接收数据发送数据链表

刘 爽,云 健

(大连民族学院计算机科学与工程学院,辽宁大连 116605)

C/C/S模式实时通信软件设计与实现

刘 爽,云 健

(大连民族学院计算机科学与工程学院,辽宁大连 116605)

根据某引航站引航管理信息平台的建设目标,设计了基于客户端/客户端 (中转服务器)/服务器模式的实时通信软件;介绍了该通信软件的网络拓扑结构,分析了服务器端和客户端基于 TCP/IP协议的通信过程及接收发送数据工作流程;重点讨论了如何利用嵌入式数据库、变长链表及多线程技术实现数据通信的完整性、实时性和安全性,并给出了 LoadRunner对通信软件的测试结果。实践表明,该通信软件运行可靠,传输稳定。

C/S模式;多线程;嵌入式数据库;实时;通信

1 系统概述

为确保港口水域运输安全、有序,根据某引航站引航调度管理的实际需求开发了引航管理信息平台。该平台利用现代化的管理手段加强港口的信息交换,实现对港口中移动目标的实时监控和动态跟踪,加强了调度引航的统一管理,以此达到提高整体工作效率、降低成本、促进管理的目的,为企业提供信息化建设的全面解决方案。

通信软件是整个管理信息平台的核心环节,实现了导航系统与监控系统、引航调度系统之间的通信,即向监控系统发送船舶、车辆动态信息,从监控系统接收它船的动态信息;向引航调度系统发送计划请求信息、引航开始/结束时间、天气预报请求信息、风速仪请求信息,从引航调度系统接收引航计划、天气预报信息和风速仪信息。管理信息平台总体网络拓扑结构如图 1。

通信软件分为服务器端、客户端中转服务器端、局域网客户端 3部分。服务器端通过串口接收通信运营商转发过来的船舶 A IS/GPS、车辆GPS定位数据,解析存入Oracle数据库,根据配置文件读取有效转发中心 IP地址和端口号列表,建立监听 Socket,接受客户端连接请求,维护客户端Socket链表。连接建立成功则把接收到的二进制数据流通过 TCP/IP协议发送到各客户端中转服务器处。中转服务器接收到服务器发来数据后依据配置文件 UDPClient.txt,读取各终端用户的 IP地址和端口号,并根据用户数目每 20个用户创建一个套接字,然后通过UDP协议将二进制格式数据发送到局域网各客户端,同时对接收到的数据解析以数据表格形式显示。局域网客户端只接收数据,按通信协议解析,以数据表格形式显示或是叠加到电子海图上显示即可。

数据通信的效率决定了整个管理信息平台的性能,因此采用了嵌入式数据、变长链式存储及多线程技术来实现通信软件的实时、准确、高效。

图1 通信软件网络拓扑结构图

2 通信软件总体设计

引航管理信息平台监控系统使用 C++作为开发语言,Visual Studio 2005作为开发工具,引航调度系统使用 Java作为开发语言,MyEclipse6.5作为开发工具,为实现与两系统的兼容并保证通信的实时高效,通信软件采用 C++作为开发语言。整个通信软件设计开发过程采用面向对象方法,使用UML2.0作为描述工具。

服务器端工作过程[1-2]如下:首先与通信运营商转发 GPS/A IS数据中心建立 TCP/IP连接,启动接收数据线程,负责接收二进制数据文件;处理数据线程,负责解析二进制数据,在界面上显示并存入服务器的 Oracle数据库;监听客户端连接线程,负责建立用户 Socket和监听 Socket的连接;发送数据线程负责向合法客户端(中转服务器)发送二进制数据。其中的 Socket采用阻塞类 CSocket作为基类,CSocket类在非阻塞 Socket基础之上实现了阻塞操作,在阻塞期间实现了消息循环[3-4]。

在服务器与客户端(中转服务器)通过 TCP/ IP协议建立连接过程中,服务器端维护一个合法客户端请求链表,对长时间不接收数据的客户端或是网络连接出现故障的客户端定期删除更新,对合法客户端接受请求发送数据。

客户端(中转服务器)工作过程如下:当客户端应用程序向服务器发出连接请求时,启动连接线程,负责与服务器建立网络连接,定时检查是否出现网络故障或服务器重启等情况,出现错误则重连。服务器首先读取 config.txt文件,查找客户端 IP地址是否合法,合法则接受连接请求。建立完连接后客户端会再向服务器发送读取数据请求,服务器端处理请求后开始发送数据。当指定端口开始有数据写入,中转服务器启动读数据线程,直接读取网卡缓冲区数据,写入到一个变长链表中,避免数据丢失;在视图的初始化更新操作中启动数据处理进程,从消息链表中读取数据,逐条解析,插入或更新数据库中数据,并显示到界面上,处理完的数据则全部删除。在接收数据的同时,启动发送数据线程,读取UDPClient.txt配置文件获取局域网内各终端用户的 IP地址和端口号,每 20个客户端建立一个基于UDP协议的 Socket,之后开始持续传送二进制数据文件。

第二级客户端即局域网客户端软件功能较简单,就是接收二进制数据,按通信协议解析,存入数据库,可供监控系统调用在电子海图上显示监视目标的动态情况。

服务器端和两级客户端应用程序接收数据解析过程基本相同,即在指定端口接收数据,按通信协议格式解析接收到的数据,存入数据库表,其活动图如图2。

两级客户端发送数据活动图如图 3。

服务器端应用程序通过短信向船载或车载终端发送天气信息、风向信息,实现过程是把需要发送的数据封装成规定的通信协议格式,由无线运营商转发到终端 S IM卡上。而两级客户端通过服务器向终端发送引航计划请求信息或是引航开始/结束时间等数据时过程类似,只是发送的目的地是指定的 IP地址和端口。

图2 接收数据处理活动图

图3 两级客户端发送数据活动图

3 提高通信软件性能的 3种技术

3.1 嵌入式数据库

为降低应用程序与大型数据库交互的代价,第一级客户端采用嵌入式数据库 Sqlite3[2]。

Sqlite3作为嵌入式数据库,占有资源少,小巧、速度快。Sqlite3与 access一样是文件型数据库,就是说,一个数据库就是一个文件,在此数据库里可以建立很多的表,建立索引、触发器等等,但实际上就是一个文件。备份这个文件就备份了整个数据库,占用存储空间非常小。

Sqlite3不需要任何数据库引擎,即使用Sqlite3来保存一些用户数据,也不需要安装数据库。它提供了一系列 C函数接口,通过这些接口,传递一些标准 SQL语句就能够操纵数据库。

Sqlite3使用读、写锁控制对数据库的访问。典型地,其他嵌入式的 SQL数据库引擎同时只允许一个进程连接到数据库。目前,只有 Sqlite3的SQL数据库引擎能处理如此多的并发操作,即允许多个进程同时打开一个数据库,同时读一个数据库。当有任何进程需要写数据时,必须在更新过程中锁住数据库文件。

3.2 多线程技术

多线程编程技术[6]是将程序任务分成多个并行的子任务,特别是在网络编程中,很多可以并发执行的功能利用多线程可以提高程序的快速响应。为了保证用户总能够在很短的时间内完成与应用程序的交互,本文的通信软件服务器端和一级客户端都采用了多线程技术。

服务器端应用程序主要由接收数据线程、处理数据线程、监听客户端连接线程、发送数据 4个线程组成。程序开始即启动监听客户端连接线程,负责建立用户 Socket和监听 Socket的连接。连接建立后启动接收数据线程,负责接收二进制数据文件;处理数据线程由接收线程启动,负责解析二进制数据,在界面上显示并存入服务器数据库。

客户端中转服务器应用程序启动 4个线程,包括连接线程、接收数据线程、处理数据线程、发送数据线程,完成数据的接收和解析、显示、传送功能。

使用多线程技术就存在数据同步问题。该通信软件在测试过程中就出现了二级客户端数据与服务器数据不同步,且数据过少问题。经调试发现,对接收数据的变长链表加锁时间存在问题。在对链表未加锁操作之前,可能会出现将处理线程切换到接收线程的情况,当再切换到该线程的时候,m_s MsgQueue的大小就发生了变化,随着链表数量的增大,查找时间越来越长,而放到链表后面的数据长期得不到执行,就产生了程序运行不顺畅,数据更新慢现象。针对这一情况,把加锁操作时间点提前,保证每次线程跳到 OnProcess Message()函数时一次执行完毕,避免发生链表数量越来越大的现象。

3.3 变长链式存储

链式存储可以零散分配存储空间,比线性存储结构插入、删除等操作的效率更高。通信软件中的服务器和两级客户端接收数据的线程都使用了变长链表来存储接收的数据,一是保证存取操作效率,二是变长适应了不同数量终端的需求。

同时把变长链表和多线程结合使用。如中转服务器数据处理线程中当链表中的元素个数位于100和 200之间时该线程的优先级提高到THREAD_PR IOR ITY_ABOVE_NORMAL,当优先级在 200以上时将优先级提高到 THREAD_PR IOR ITY_H IGHEST,低于 100时设成正常模式。此外在链表数据量大于零时将休眠时间缩短到 10 ms,否则提高到 500 ms。对链表的动态维护一是防止链表中留有过多数据得不到及时的入库和发送,二是防止 CPU分配过少资源给接收线程,使接收缓冲区留有过多数据得不到及时接收,能够自适应调整线程的优先级,合理利用 CPU资源。

4 性能测试

由于通信软件的关键性能在于高效传输数据,对界面要求不多,因此这里不再给出界面效果,只给出测试软件 LoadRunner[7]对 200个移动目标同时发送数据的测试结果。图 4为W indows资源图。

图 4 通信软件测试W indows资源图

其纵坐标是资源使用率 (Resources Usage)。W indows资源图描述W indows主机的系统资源摘要。最高的一条曲线为 CPU使用率,第二、第三条曲线为以 K字节计算和M字节计算的物理内存可用字节数,最低的第四条曲线是磁盘驱动器忙于读或写入提供服务所用的时间百分比。由此图可知,服务器的 CPU使用率均值为 66.164%,磁盘驱动器忙的时间百分比均值为 4.99%,可用物理内存在 2149.57 M左右,说明通信软件性能能够满足 200个用户并发操作的请求。

5 结 语

本文开发的系统目前已在某引航站交付使用,系统运行稳定。本系统服务器和两级客户端之间的数据传输采用客户端/客户端/服务器模式,基于 Visual Studio 2005开发平台编程实现,而服务器、客户端软件均采用多线程技术。实践表明,嵌入式数据库、变长链表和多线程技术可以实现高性能可靠的数据通信。

[1]刘爽,贾传荧,陈鹏.基于 C/S结构的车辆监控系统设计与实现[J].计算机工程与设计,2005,26(12): 3320-3323.

[2]刘爽,史国友,张远强.基于 TCP/IP协议和多线程的通信软件的设计与实现 [J].计算机工程与设计, 2010,31(7):1417-1420,1522.

[3]施炜,李铮,秦颖.W indows Sockets规范及应用 -W indows网络编程接口 [M].北京:清华大学出版社,2000.

[4]吴暾华.网络视频监控系统中数据传输的实现 [J].计算机工程与设计,2004,25(6):971-974.

[5]OWENSM.The Definitive Guide to SQLite[M].New York:Apress,2006.

[6]HUGHES C,HUGHES T.C++面向对象多线程编程[M].周良忠,译.北京:人民邮电出版社,2003.

[7]于涌.软件性能测试与 LoadRunner实战[M].北京:人民邮电出版社,2008.

(责任编辑 刘敏)

Design and I mplementation of Real-t ime Commun ication Software in Client/Client/ServerM ode

L IU Shuang,YUN Jian
(College of Computer Science&Engineering,Dalian NationalitiesUniversity,Dalian Liaoning 116605,China)

To achieve the goal of a pilotage management infor mation platfor m for some piloting station,we designed real-time communication software based on the client/client(relay server)/servermode.Thispaperpresents the network topology of the software and analyzes the communication process between the server and the client through TCP/IP and the workflow of data reception/transmission.The discussion is focused on how to ensure the integrity,real time and security of data communication using embedded databases,variable-length chain tables and multithreading technology. It also gives the result of communication software tests made with LoadRunner.It turns out that the sof tware runs reliablywith steady trans mission.

client/servermode;multithread;embedded database;real-time;communication

book=9,ebook=234

TP393.09

A

1009-315X(2010)05-0477-04

2010-6-21

大连民族学院博士启动金资助项目(20076207)。

刘爽 (1977-),女,满族,辽宁锦州人,副教授,博士,主要从事智能交通系统、机器学习研究。

猜你喜欢

接收数据发送数据链表
移动自组网中MAC层协议研究
冲激噪声背景下基于幅度预处理的测向新方法*
基于二进制链表的粗糙集属性约简
跟麦咭学编程
低复杂度多输入多输出雷达目标角度估计方法
基于马尔科夫链的LoRaWAN网络节点性能分析
带标记方式的CRDSA++协议性能分析*
基于链表多分支路径树的云存储数据完整性验证机制
使用IPSec安全传输数据
单片机模拟串口数据接收程序的实现及优化