当前位置:首页 > 日记 > 正文

短信网关通信模块的设计与实现

短信网关通信模块的设计与实现

  摘 要:在阐述短消息网关结构的基础上,提出了短消息网关通信模块的设计思想,并给出了该通信模块的具体实现。


  关键词:短消息; 短消息网关; 通信


  1 前言


  随着通信技术的发展,无线互联网短消息业务正在为用户提供越来越多的服务。人们不仅可以通过手机点播定制新闻、股票信息、天气预报,还可以下载铃声、图片等。无论需要什么样的信息,我们都可以随时随地地通过手机接入互联网络,享受各种服务。电信运营商要实现这些增值业务,就必须支持网间的互联互通。


  目前实现网间互联互通的方式有四种,包括:通过移动关口局互联互通;通过信令转接点互联互通;通过短消息网关互联互通;通过第三方运营商系统互联互通。前两种方式不易设置计费点和引出计费话单,因此不利于网间结算;最后一种方式,虽然能够保证计费点和结算点的统一,但是易受到地域条件的限制。而通过短消息网关实现互联互通,无须对现网运行的设备进行大面积的数据改动和升级改造,能够合理的设置计费点,保证计费的准确性,实现业务鉴权和业务过滤的功能,保证网络的安全,也能够通过对业务流量的监视和控制,防止网络风暴的发生,这种互联方式具有其他三种方式不可比拟的优点。目前,大部分短消息业务的互联互通都是使用短消息网关来实现。


  2 短消息网关结构


  短消息网关(ISMG)是处于短消息中心(SMSC)和业务提供商(SP)之间的设备,它为这两个实体的数据交换提供安全、快捷的通道。网关与短消息中心之间使用SMPP协议(Short Message Peer to Peer,短消息点对点协议), 与SP之间使用CMPP协议(China Mobile Peer to Peer,中国移动点对点协议),因此短消息网关需要完成协议的转换、计费、路由、安全和网络管理等功能。其结构图如图1所示。



  具体说来,图1中SMPP通信代理系统主要实现网关和GSM网中短消息中心(SMSC)的连接,确保准确接收和发送数据,实现高效、可靠的数据传输。为了达到规范要求的不超过0.001%的数据丢包率,SMPP通信代理需要支持流量控制。CMPP通信代理系统主要是实现和SP服务提供商的连接,与SMPP通信代理系统不同的是,由于协议的影响,CMPP通信代理是端,需等待SP的连接,而SMPP通信代理是客户端,需要主动连接SMSC。短消息网关处理系统是网关中最复杂的处理进程,它完成的任务包括:向GNS(汇接网关) 查询路由,维护路由表,进行协议转换和数据分发。防火墙系统主要为网关系统提供安全保障,它包括IP包过滤和身份验证。短信网关计费系统主要形成各种计费话单,为计费提供依据。业务管理系统主要完成对业务进行统计报告,生成报表,为运营者对用户数据的添加、修改、删除以及对网关系统的监控、查询、操作和维护提供接口和界面。


  3 短消息网关通信模块的设计与实现


  短消息网关通信模块是整个短消息网关的基础。无论是计费、统计,还是超时重传,高质量的通信构架是必不可少的保障。这个通信构架不仅要完成基本的收发消息的功能,而且还要有好的结构以支撑各种业务需求,保证良好的扩展性。


  3.1. 短消息网关通信模块的设计


  在设计短消息网关通信模块时,我们考虑了以下几点:


  第一,由于短消息网关功能繁多,如果把通信和具体业务合在一起开发,容易顾此失彼。可能会因为开始的考虑不周全,造成在增加某项新业务时不得不修改通信底层和原来的业务代码,导致重复开发。所以我们采用通信代理的方式把通信和具体业务分开,在增加新业务时,就只需少量修改通信代理的设置,而且不必再改动原来的业务代码了。


  第二,通信代理需要同时侦听多个端口,我们选用多路复用I/O这种方式。虽然多线程能够通过并行计算和共享内存提高代码效率和资源利用率,但在短消息网关中,处理的数据量大,多线程方式的并行处理会造成一些消息的逻辑混乱,资源共享也会增加代码的复杂度。而多路复用使用简单,逻辑清晰明了,不易发生错误,也不会出现因资源共享带来同步和互斥问题。因此使用多路复用I/O是比较合理的。


  第三,业务处理模块与通信代理之间可以使用队列进行通信,对队列的管理和参数的设置(例如对同一队列操作的互斥,以及队列个数的设置等)都使用专门的队列内核程序统一调度并封装成函数接口,以方便业务处理模块对队列的使用。另外,通过队列通信,也可以为今后增加的业务提供良好的扩展性。


  第四,为了达到99.999%的不丢包率,通信代理需要使用流量控制机制以保证网关内部不丢包。这是因为无论队列设置有多大,如果出现消息只发不收的情况,都会造成队列溢出而丢包。因此,为每个队列中缓存的消息做记录,当某个时刻队列消息的数量达到规定限度,队列就不再收包,以保证到达网关的消息不会丢失。


  3.2. 短消息网关通信模块的实现


  基于以上设计思路,我们实现的短消息通信模块包括四个父进程:CMPP通信代理(cmpp_server)、SMPP通信代理(smpp_server)、消息分发处理server(package_server)和前转消息处理server(route_server)。它们之间通过6个消息队列相互通信。具体的结构如图2所示。



  Cmpp_server主要为SP和网关之间建立一条高质量的传输通道。它同时侦听与它相连的多个socket,通过队列接口函数mqm_send( )把接收到的CMPP格式的消息送入队列2中。同时,它也要通过函数mqm_recv( )不停的从队列1中获得消息,并把它转发到相应的目的SP。cmpp_server不需判断收到的消息类型,只负责通信,因此称通信代理。


  Smpp_server与cmpp_server基本一致,唯一不同的只有一点:SMPP协议规定smpp_server是客户端,需要主动发起建立连接的请求;而CMPP协议规定cmpp_server是端,需等待对方连接。


  Package_server是短消息网关的核心,所有的消息都要经过它,包括协议转换,超时重传,计费,路由,都需要在package_server中完成。package_server同时监听2、4、6三个队列,根据不同的消息头来判断这个消息的下一个目的地。路由表也需要在package_server中维护,以便package_server能得到路由信息,转发消息。如果路由表中找不到相关的信息,package_server就要把该消息转发给route_server,由route_server从汇接网关处获得路由信息后发送该消息。


  Route_server主要处理需要转发到其他网关的消息。当package_server发现消息的目的地不是本地网关所连的SP或SMSC,那么它就会把消息转发给route_server处理。Route_server接到消息后与汇接网关通信,请求目的地的网关地址,然后与目的网关建立socket连接,交付该消息并记录前转话单。


  在整个通信模块中,所有的server都使用队列接口函数mqm_init( )初始化消息队列并复接在队列上。收发数据使用mqm_send( )和mqm_recv( )函数完成。存储消息采用固定的数据结构,其结构如下:


struct mqm_connection {
unsigned int package_server_seqnum; //由网关自行产生。若消息从队列4中来,该元素将是转化后的//CMPP协议格式的消息序列号;若消息从队列2中来,该元素将是转化后的SMPP协议格式的消息序列号。
short mqm_sockfd; //接收该消息的socket;
short mqm_seqnum; //收到的消息序列号;
time_t mqm_timeout; //收到该消息的时间;
int total_length; //该消息的长度;
char mqm_buf[MAX_PACKET_SIZE]; //该消息的内容;
char converted_buf[MAX_PACKET_SIZE]; //转换协议后的消息内容;
};


  现以MO请求业务为例,描述通信模块的工作流程。


  当SMSC以SMPP格式的DELIVER_SM消息发出订阅某个SP的言语传情短消息,经由smpp_server收到,从队列4中转发给package_server。Package_server收到MO请求后回送给SP一个SMPP格式的DELIVER_SM_REP应答消息,并用mqm_connection结构体存储这条MO消息的各个信息。 之后,package_server就把该消息转换成CMPP协议的CMPP_Deliver消息,并通过队列1送到cmpp_server中,转发给目的SP。SP在接收到这个消息后,会产生一个CMPP格式的CMPP_Deliver_Rep的应答消息返回给网关。当package_server收到了应答信号,也需要用mqm_connection结构体存储。这时,一条MO短消息转发成功,package_server记录SMO话单。


  下面给出在Linux7.2版本的下,用C语言实现的package_server的主要代码:


main()
{
mqm_init( ); //初始化队列;
……
pipe( ); //建立管道;
if (( child_pid = fork( ) ) ==0)
{
//通过管道通知2队列有数;
while(1){
get_result_msg_info(REQUEST_2,pipfd2[1]);
}
}
……
//建立监听描述符集;
FD_ZERO ( &monit);
FD_SET ( )_;
……
//处理队列中来的数据
while(1)
{
select ( ); //监听2,4,6队列;
if ( FD_ISSET(queue2,&read_monit )) //如果2队列有数;
{
handle_queue2_in( );//处理2队列来的数据;
}
……
}//end while;
} //end main;
 


  4 结束语


  短消息网关是无线互联网短消息业务中最为关键的一个设备,它为手机用户和互联网的信息资源架起了一座桥梁。本文中短消息网关的通信模块设计周全,结构合理,为计费、路由、超时重传等模块提供了良好的扩展性。经实验室测试,在奔2处理器,64兆内存的机器上,收发包速率为每秒5000条,不丢包率达到100%,是一个稳定的系统。


相关文章

魔兽世界最强的力量漂浮在水面上!蘑

魔兽世界最强的力量漂浮在水面上!蘑

魔兽世界,水面,最强,力量,秘密,魔兽玩家每天都要面对各种挑战,使用插件是最便捷提升游戏能力的方式。近日盛传老牌魔兽插件蘑菇即将全面升级到3.0,小编通过好友渠道第一时间入手蘑菇3.0测试版,下面就让小编向大家介绍下这款号称“最简易插件平…

下载安装win7codecs_v289.exe解决w

下载安装win7codecs_v289.exe解决w

下载安装,不能播放,电脑软件,exe,wmplayer,Windows7的播放器,Windows媒体播放器不能播放视频格式的电影像MKV,RMVB,许多音频格式不支持。让你的wmplayer灵活的球员,你可以下载一个视频解码包称为win7codecs_v289.exe,和您的Windows媒体播放器可…

我的面向对象编程思想5

我的面向对象编程思想5

面向对象编程,思想,电脑软件,2.3探索功能: U3000 U3000 2.3.1构造函数、默认构造函数,默认构造函数 U3000 U3000 对于上面的例子,它已经能够完成大部分工作,但仍然不够完美。仍有许多细节等待我们去完善。一些学生可能已经注意到,当我创造了Jin…

如何使用win7的磁盘清理工具清理系

如何使用win7的磁盘清理工具清理系

磁盘,系统,工具,如何使用,垃圾,当windows7系统使用时间一长,将产生大量的临时文件,补丁文件,通过安装软件等留下的临时文件。这些文件不仅是无用的系统,而且占用硬盘空间,降低系统的运行。因此,定期清理磁盘垃圾win7系统可以保证系统正常运行的方…

新大楼11月29日上午看到消息,微软在

新大楼11月29日上午看到消息,微软在

消息,大楼,日上,电脑软件,11月29日早间消息,微软耗时2年多在北京中关村投建的新的研发大楼即将竣工,预计不久后将正式搬入启用。微软亚太研发集团CTO、微软亚洲工程院院长张宏江近日在其微博中展示了大楼内部照片,让人们得以一窥这座斥资20亿…

TheWin2003partitioncapacityfunct

TheWin2003partitioncapacityfunct

电脑软件,TheWin2003partitioncapacityfunction,分区增容是一种方法来增加一个额外的空间在一个分区的空间不能满足使用的需要。当很多朋友遇到这样的情况,这通常是通过使用PartitionMagic。但事实上,使用/服务器2003用户完全可以使用系统内…

DHTML幻灯片播放程序(三)

DHTML幻灯片播放程序(三)

幻灯片,播放程序,电脑软件,DHTML,  下面,我要开始最为核心的部分了,就是编写javascript程序了。我们的思路是,可以定义一组图片(若干张),当页面出现时先显示第一张图片,并预载入第二张图片,第一张图片载入后5秒钟,如果第二张图片也载入了,我们就开…

win7不能添加文件到Windows媒体播

win7不能添加文件到Windows媒体播

媒体库,文件,媒体播放器,电脑软件,Windows,win7不能添加文件到Windows媒体播放器媒体库 有没有什么方法可以使用一个奇怪的问题,你不能将文件添加到Win7的Windows媒体播放器媒体库。我应该做些什么呢这常常意味着Windows Media Player的数据…

使用Windows7CD-ROM刻录机记录磁盘

使用Windows7CD-ROM刻录机记录磁盘

磁盘,刻录机,电脑软件,Windows7CD,ROM,在日常工作和学习过程中,我们经常遇到我们需要刻录CD的情况。此时,我们通常使用特殊的刻录软件,如尼禄或酒精120%。事实上,在Windows 7中,微软已经为我们内置了相应的光盘刻录功能。有了它,我们可以不需要第…

病毒警告:恶意邮递变种U和QQ病毒入

病毒警告:恶意邮递变种U和QQ病毒入

入侵系统,变种,恶意,电脑软件,QQ,最新报告:金山金山毒霸反病毒急救响应中心实验室新发现的恶邮差蠕虫的新变种,命名为worm.supnot.u.the变种,像以前的版本,将使用邮件迅速传播,通过弱口令域中的网络攻击,并将系统中的一个危险的高水平的后门,让远…

传闻是,谷歌中国正式解散

传闻是,谷歌中国正式解散

解散,歌中,正式,电脑软件,传闻谷歌中国正式解散:1月15日,据消息人士透露,谷歌中国全体员工15日早上召开大会,大会上美国总部明确表示,和中国政府谈判失败,宣布谷歌中国正式解散。随后,全体谷歌中国员工中午吃了散伙饭,下午集体看imax版本《阿凡达》…

如何学习PP点(图1)

如何学习PP点(图1)

学习,电脑软件,PP,PP点对点是一个基于p2p技术的中文文件交换与通信软件。它使PP用户建立P2P连接,无需服务器,交换文件直接下载数据,共享硬盘资源,并立即聊天。其主要功能是:资源搜索、资源共享、下载和管理、好友搜索、即时通讯、广告等。Little…