基于socket的高性能短信网关接口系统的设计与实现.pdf

收藏

编号:20181110221327702217    类型:共享资源    大小:212.45KB    格式:PDF    上传时间:2019-02-16
  
2
金币
关 键 词:
的设计 socket 网关系统 短信网关 Socket socket实现 基于短信网关 的实现 系统的 接口和 性能高 短信接口 soc Socket的 的设计与实现
资源描述:
lSSN 1009—3044 C唧uf吖J(ho州Bd弘and 7.e叻nofo卯,电脑知识与技术 V01.5,No.10,April 2009,pp.2739—2742 E—mail:蝴@cccc.net.cn bttp:,,机vw.dnzs.net.cn Tel:+86—551—5690963 56909“ 基于SOCKET的高性能短信网关接口系统的设计与实现 昊娟.熊前兴 (武汉理工大学,湖北武汉430063) 摘要:设计并实现了一种高性能的短信网关接口系统。系统采用socKET长连接的方式与短信中心或短信一级网关进行交互,为 了提高系统性能增大系统负栽能力.使用了非阻塞NIo、线程池、多教据库、分层多模块的设计,使得该系统完全能够满足企业级的 应用要求。 关键词:网关接口系统;soCKET;非阻塞NIo;多数据库设计.JAVA多线程 文献标识码:A 文章编号:1加19—3044(2咖19)10-2739_04 Design and ImpIeI鹏ntation 0f High Perfb珊a眦e Gateway Con愀U佃System B墩d佃S仳ket 、)IrLJ J啪,ⅪoNG Qi扭一血g 何uhan UniverS卸of Techn0109y,wuhan 430063,Cl血a) Abst阳ct:T11iS paper desi印ed aJld ilIlplemented one l【i11d of 11igh pe而nmnce伊teway co衄ecdon systeIIL The syS屯锄u蝤dle SoCⅪ玎 long co皿ecdon山e way a11d SMC exchange or me丘rst level gateway carri∞on altenlately。i11 ordef to em啪ce the system perfb咖nce to 佃c咒aSe dle盯stem 10ad capaci哆,11sed NIo,龀tIlread Pool,tlle mul6一databas豁,me蜥mdon muld—mo叫e deSign,embled dlis S)rstem de6rlitely to be able t0鼢tiSfjr dle enterprise t11。apPhcation requesc. Key words:静teway conne面on町steln.SoCⅪ玎;NIo;muldTllreaa 随着手机用户的不断增多。收发短信已经成为手机用户最经常使用的业务之一。作为与短信中心或短信一级网关进行交互的 短信网关接口系统,为广大服务商(SPl提供一条安全、快捷的数据交换通道,可以方便手机用户以短信方式与服务提供商(SD进行双 向通信,同时为服务提供商完成协议转换、计费管理、业务管理和网络管理等功能。而高性能、吞吐量大、安全可靠的短信网关接口 系统一直是中国四大运营商和服务提供商要追求的目标。 本文设计并实现了这种要求的短信网关接口系统。此系统采用JAVA作为编程语言,并使用SOKCET、多线程、非阻塞10、异步 通信等技术.采用多数据库、多层结构体系的设计方法来实现该系统,能够承受较大的短信流量负荷,达到企业级的应用要求。 l系统设计 1.1系统结构 本系统位于移动运营商的短信网关和服务提供商的短信业务之间,负 责完成各类短信业务的综合接入和管理。从总体上看,可以分为四大部分, 分别是短信网关接口模块、业务逻辑处理模块、业配置管理模块、和多数据 库模块,如右图所示。 短信网关接口模块:它主要负责费率转换、记录话单、与短消息网关交 互等功能: 业务逻辑处理模块:主要负责短信MO、MT消息业务的具体处理逻辑; 配置管理模块:为短信网关接口模块提供路由、帐号、接入地址、网关 流量速度等配置信息的管理; 多数据库模块:用于记录短信消息、费率信息、话单数据、业务数据以及各种业务信息; 1.2系统模块功能设计 1.2.1短信网关接口模块设计 此模块是本系统的核心模块,它负责与短消息中心和一级网关的消息交互,以及消息的存储转发、协议的转换、费率转换、身份 验证.以及生成话单等功能。 它的具体业务流程如下: 1)根据从运营商申请的网关地址、用户名和密码与短信网关建立联接; 2)从短消息网关接受消息。将四大运营商的协议进行解析并转换成标准的SMPP协议消息包,并写短信信息话单到文本文件; 3)如果是上行M0消息,且信息类型是状态报告则把状态报告直接写到文本文件,否则将SMPP消息包根据不同的路由转发到 业务逻辑处理模块: 4)如果是SP的主动MT消息,则根据预先配置的费率转换信息把消息中包含的内部扣费码转换为外部扣费码,然后将内部的 SMPP消息包,转转换成实际运营商使用的短消息协议包,然后Submit到短消息网关上; 5)对于生成的话单,要使用一个话单入库程序,负责把生成的话单文件和状态报告文件导入到数据库中,供系统监控跟踪和分 析统计使用。 1.2.2业务逻辑处理模块设计 本模块是根据网关接口模块传过来的SMPP消息包,执行业务处理存储过程,来保存业务数据和执行具体的业务逻辑。 收稿日期:2009一02—20 本栏目责任编辑:贾薇薇 一-·--计算机工爱应用技术·-2739万方数据万方数据 C唧埘er f(nD刚日d弦a几d MD切电脑知识与技术 第5卷第10期(2009年4月) 它的具体业务流程如下: 11根据S隧PP协议包中的消息内容、源手机号码和目的号码,找到该条消息对应的处理存储过程; 21将协议包中的参数转换成存储过程的输入参数,然后执行存储过程; 31存储过程负责该条消息的业务逻辑处理和相应数据的保存,并获取最终的结果; 41将最终的结果重新封装成SMPP协议包转发给网关接口模块处理; 1.23配置管理模块设计 本模块是对网关接口模块和业务处理模块连接参数的配置和短信消息的实时监控。 它的具体业务流程如下: 1)根据配置的用户名和密码登陆; 21为网关接口模块配置与短信网关相连接的地址、端口、登陆名、登陆密码、协议类型、服务类型、流量速度、路由信息等参数; 3)配置与业务处理模块相连接的帐号、密码、服务类型、路由信息等参数; 41当网关接口模块与短信网关模块连接上时,可以实时的跟踪短信消息的协议参数,并能监控收发短信的状态,并能图形化的 显示短信协议包内部所有协议信息: 5)还能提供对某一个手机号码消息的跟踪功能,并能对某一时间段的跟踪数据进行保存。并提供对保存数据的查看、删除等管 理功能: 1.2.4多数据库模块设计 本模块是用来保存业务数据和多个不同数据库之间的数据同步。本系统为了达到较高的吞吐率,至少要采用3个库,可以称之 为主库、运行库和话单库。 主库主要是用于网关接口模块的连接,来获取费率转换信息; 运行库主要用于业务处理模块的连接,用来执行业务逻辑处理的存储过程; 话单库主要用于短信话单和状态报告入库程序的连接,用于保存话单和状态报告数据; 具体短信业务处理流程都是通过存储过程来实现.数据库的同步则由数据库的JOB来调用相应的同步存储过程来完成不同数 据库的数据同步。 2系统实现 2.1网关接口模块实现 本模块主要采用JAVA的SOCKET技术来与短信网关建立连接,使用多线程和非阻塞技术来提高系统性能。部分核心代码如下: 1)网关接口模块作为Socket的客户端与短信网关的Socket服务端进行连接; public cla88 SocketClientNonBlocking Ipriv8te im眈nrerPort.//短信网关端口号 p—vate String serverIpAddress∥短信网关IP地址 p打vate S0cketCh肋nel socketCh卸nel:,/客户端Socket通道对象 p—vate selector鸵lector;朋E阻塞SeIector private Charset char驼t∥字符编、解码对象 private ByteBumr r}eaderBu&叫读缓冲区 private ByteBumr而terB豳r;/,写缓冲区 ,搴·系统初始化处理}, public SocketClientNonBlocking(String remoteAddress,int remotePDrt) {try{servedpAddre黯=remoteAddress; serverPort=弛motePort: ,,1.与短信网关建立连接 socketCh锄nel=Socketch明nel.open0; ,,配置当前通道为非阻塞方式 80cketChannel.conngureBlocking(fhlse); socketChannel.connect(new IIletSocketAddress(servedpAddres8.∞n,erPort)); ∥2.初始化非阻塞对象 眈1ec眦=Selector.叩en0; ch婚et=Charsel.firN帅e(”GBK”1; readerBu能r=BvteBu雎r.allocate(2048); writerBufkr=B”eBu妇fer.aU0cate(2048); log.debug(”连接短信网关[”+眙n,erIpAddress+”:”+senrerPort+”】成功!”);} catch(IOException e)f e.printstackTmce0; log.en_o一连接短信网关【”+靶rvedpAddress+”:”+鸵rverPort+”】失败!”);Jl/幸·拿功能:铂 窜, public void肫ⅣiceO I时l,/向Selector注册socket读和写事件 B0cketch咖e1.mgiste啦k:ctor,SelectionKey.OP-READ selectionKey.OP_WRITE); while(∞lector.sekct0o) fSet keyB=selector.8electedKeys0; Itemtor it8=keys.itemtoro; while(it8.hasNextO) fselectionKey key=蛐Ⅱ; try{key 2(selectionKey)its.nextO;i协.remove0; if(1【ey.isReadableO) 2740··计算机工疆应用技术···-- 本j兰目贾任编辑:贾薇薇万方数据万方数据 吴娟等:基于soCKET的高性能短信网关接口系统的设计与实现 I,,从通道中获取数据 SocketChannel 80cketCh锄nel:(SocketChannel)kev.charInel0; ∞cketChannel.read(I℃aderBufl.er);readerBuⅡbr.nip0; String∞ⅣerMsg 2 ch躺et.decode∞aderBu雎r).【oStringO; int endlndex=serverMsg.indexO“”、II”); ,,没有读取到数据直接退出 if伯ndIndexo) {log.debug(”获取所有事件Selecti如Key…”); Set kev8=$elector.selectedl(eys0; nemtor it=keyB.itemtoro; while(it.h鹳Next0){ S;electionKev kev=nuU: try{key。(selectionKey)it.nextO;it.removeO; if(key.i8Acceptable0)f 109.debug(”开始获取客户端的连接…”); senrersocketch觚nel seⅣe60cketCh锄nel=(ServerSocketCh咖e1)key.cha彻e10; socketCh锄nel$ocketChannel=8哪erSocketChannel.accepto; socket socket=socketChannel.socket0: §ocketch明nel.co曲舭reBlocking(fal鳓; By【eBu白fer by【eBu自fer=B丫teBu由fer.龇8Ie(2048); 80cketCh明nel.弛gi8ter(卵lector’SelectionKey.0P—jREAD I SelectionKey.0fi.WRnt,byteBu妇Fer);l if(1【ey.isReadableO){109.debug(”读客户端数据…”); SocketCh蛐nel socketChannel=(SocketChannel)key.channelO; ByteBuH毛r b)rteBu由fer=(ByteBufrer)key.且ttachmento; ByteBu自fer肥adBu自fer=B”eBu丑.er.allocate(2048); 80cketCh蛐nel.read(readB战r);f}eadBu能r.nipO; byteBu仃er.1imit(byteBu艉r.c印8cityO); b、neBu圩br.put(T_eadBu£fbn:l if(1【ey.i8Writable0) {log.debug(”向客户端写数据…”); 本栏目责任编辑:贾薇薇 --··-计算机工毫应用技术··2741万方数据万方数据 G洲脚lf(howIec垆and死cMD『ogy电脑知识与技术 第5卷第10期(2009年4月) SocketChannel socketChannel=(SocketChannel)key.channelO; BvteBuⅡ打b”eBuⅡer=(ByteBuff每r)key.attachment0; bvteBu&r.fup(); String msg 2 charset.decode(byteBuf玷r).toStringO; ,,没有数据 int iIldexOfEnd=msg.index0“”\Ih”); if“ndexofEndO)retum; index0厄nd=msg.indexof(”、n”)+1; String clientInf0=msg.substring(0,indexofEnd); log.debug(”获取客户端的数据:”+clientInfo); BvteBu归fer w而teBuⅡbr=B、neBufI.e r.allocate(2048); w—teBuⅡ打=charsef.encode(”Echo:”+clientInfo); /,写入数据 while f’嘲teBu艉r.hasRemainin90) 鲫cketChannel.佣te(writeBⅢkr); ,/作删除处理 b”eBu如r.position(charset.encode(cljentInfo).1jmitO); b”eBu行er.compact0; ,/是否退出客户端的连接 if(clientInf0.equals(”byte\^n”)) lkey.c曲cel0;socketCh蚰nel.close0;l” catch(10Exception e) fe.一ntStackTmceO; 奶r{if(1【ey!=null){key.callcelO; key.channel0.closeO;” catch(10Exception e1){e1.printStack7I'rE圮e0;}1)l} catch(ClosedChannelException e) {e.printStackTraceO;}catch(10Exception e)( e.printStackTrace0;}J 2.2业务逻辑处理模块实现 本模块主要采用非阻塞的方式来与网关接口模块的服务端来建立连接。此部分实现可参考网关接口模块实现部分。 2.3配置管理模块实现 本模块采用阻塞技术和线程池相结合的方式来分别与网关接口模块和业务逻辑模块建立连接。此部分实现可参考网关接口模 块实现部分。 3结束语 本文设计并实现了一种短信二级网关接口系统。为了获取高性能和高吞吐率,系统使用了Java的非阻塞、多线程、线程池、数据 库连接池等技术,并对系统分层,利用Socket技术将系统分成多个模块,并加入多个数据库进行数据量的分流。从而,使本系统能够 获得较好的性能.为运营商和SP提供了网关接口系统企业级的解决方案。 参考文献: 【l】金勇华,曲俊生.JAVA网络高级编程[J】.2003,29(8):195—196,F003. 【2】哈诺德.Java网络编程[M】,2005. 【3】Relly,D,Reilly,M.Java网络程序设计与分布式计算【M】.北京:清华大学出版社,2004. 【4]萧文龙,林松懦.TC肌P最佳人门【M】.北京:机械工业出版社,2007. 【5】刘著,顾铁成.分布式计算原理与应用[M】.北京:清华大学出版社,2000. 【6]Cr矾南r;d,W,KaplanJ.J2EE设计模式【M】.北京:中国电力出版社.刘邵华,译.2000. 【7】田雪松.J2EE网络编程标准教程[M】.上海:上海科学普及出版社,2000. 吴娟,女,硕士,研究方向:计算机支撑应用技术。 2742··计算机工氇应用技术-一·-· 本栏目责任编辑:赛薇薇万方数据万方数据
展开阅读全文
  皮皮文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:基于socket的高性能短信网关接口系统的设计与实现.pdf
链接地址:http://www.ppdoc.com/p-10914253.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们

copyright@ 2008-2018 皮皮文库网站版权所有
经营许可证编号:京ICP备12026657号-3 

收起
展开