1.    引言 

近年来,随着短信增值业务的繁荣,以短信为基础的产业链逐渐形成。在这条产业链中,网络提供商(例如:中国移动、中国联通)作为网络平台的提供者,向SP服务商(Service Provider,简称SP)提供有偿的数据和网络平台,而SP服务商利用此网络平台,向广大短信用户提供各种具体的应用服务。为了继续活跃短信市场,网络提供商降低了SP服务商的门槛,使得更多的中小型SP服务商融入到此产业链中。

本文从介绍Java短信平台所依托的网络结构和原理的大背景出发,利用Java语言面向对象特性和在Web服务、XML方面的优势,提出了适合于中小型SP服务商短信平台的软件模型,并着重论述了此软件模型的总体框架、业务动态分配、状态控制三部分。最后述说了实现此软件模型所需要的几个关键Java技术。

2.    背景介绍 

2.1常用缩略语

首先对本文中出现的、在SP短信平台中经常使用的缩略语做简要说明[1]

表 1 缩略语说明

2.2网络平台的结构和原理

中国移动、中国联通作为网络提供商,其本身并不经营具体的短信业务,而是由SP服务商提供短信业务。例如当手机终端用户在使用苏州地区气象短信服务时,手机终端首先向气象SP服务商的特服号01218发送内容为TQYB的短信。当SP服务商的短信平台接收到TQYB后,做适当的业务处理后,将当前的天气情况再发送到手机终端上。而此时,手机终端则表现为接收到一条由01218回复的短信,其内容是当前天气情况。在一发一收过程中, SP服务商做了什么?网络提供商又做了什么呢?

SP短信平台与手机终端用户之间通过网络提供商的中介实体SMC 与ISMG相连。网络的逻辑结构如示意图1。

图-1互联短信逻辑网络结构示意图

(1)       手机终端发出的短信首先通过GSM协议被SMC接收;SMC再将短信路由给ISMG;

(2)       ISMG随后将短信通过CMPP协议传送给SP服务商;

(3)       SP服务商根据接收到的短信和自身的业务逻辑产生业务输出;

(4)       SP服务商将需要发送给用户的短信按CMPP协议发送到ISMG;

(5)       ISMG再将短信路由给SMC,最后由SMC负责将短信按GSM协议发给手机终端。 

本文中的SP短信平台是指SP服务商所拥有的、能够完成上述短信流程中第(2)(3)(4)步的、用于满足自身短信业务需求的软件平台。

3.    SP短信平台的软件模型 

3.1    模型的目标

SP短信平台软件模型的第一个目标是要能够按照多种通信协议通信。这是因为在实际业务中,虽然大部分短信业务流程的发起者是手机终端用户。但是,为了丰富短信业务的使用渠道和方便用户,短信流程的发起者呈多样化。以下是常用的4种短信业务流程发起者。

(1)       由用户手机终端发起

这是最常见的一种发起方式。由手机终端对特服号发出某短信业务代码,经过短信网关按照CMPP协议传至SP短信平台。经业务处理后,回复手机终端用户。例如:实时股票指数查询、气象实时查询。

(2)       由网站发起

用户在网站上完成短信业务注册包月,或者下载短信。此方式是通过Http协议由web服务器激发web容器中短信服务模块,从而完成相应的短信业务流程。例如:通过网站下载短信笑话、在气象网站上完成气象服务的包月注册。

(3)       由短信平台自身发起

对于一些包月业务或者其他第三方软件系统中提示功能的短信业务,通常是在某些特定条件下由短信平台激发短信业务模块。例如:商务平台中内嵌日历短信提示功能。

(4)       由SOAP协议发起

用户有时通过客服电话或者移动公司的商业网点来订阅短信服务。这时的订阅请求经由MISC以SOAP协议方式发送到SP短信平台上。所以这种类型的短信业务是由SOAP协议激发的。

由此使得SP短信平台中通信部分所使用的通信协议和通信方式各不相同。

SP短信平软件模型的第二个目标是一个短信平台同时挂接多个短信子业务。这第二个目标也是是由中小型SP服务商的业务特点所决定的。其特点有:

(1)       充分利用企业特性,开发的短信业务种类丰富,甚至业务逻辑经常发生变化;

(2)       每种短信业务的逻辑并不复杂;

(3)       业务与业务之间互不干扰。

3.2   SP短信平台软件模型的总体框架

根据以上两个目标的分析,软件平台总体思路是将业务模块和通信模块分离。按照各模块的功能可以划分为四部分,短信接收模块、任务分配器、业务逻辑模块、短信发送模块。短信接收模块将接收到短信都存入缓冲池中,然后任务分配器将不同的短信分配给相应的业务模块。最后将产生的短信回复通过发送模块发送。示意关系如图2。

图 2 模块之间的示意关系

3. 3  业务模块和通信模块分离

3.3.1  收、发送通信模块

通信模块主要解决短信业务流程不同发起者的问题。对于由网站发起和由短信平台自身发起部分的实现比较容易。而处理另外两种发起者时,就要求通信模块同时具有按CMPP协议和按SOAP协议通信的功能。所以可以将接收模块进一步分层,分为上下两层:底层模块按两种不同的通信协议(按CMPP通信协议方式接收或者按SOAP协议方式接收)接收来自短信发起源的短信,并以统一的格式传给上层模块;上层模块则在接收到底层模块的短信数据后,将其送入缓冲池,并产生原始记录。

3.3.2  缓冲池

作为一个实时通信系统,并发是一个不可避免的问题,而且随着业务量的增大,并发度也会相应提高。虽然在CMPP协议中提供了解决在传输时并发的手段,如通过滑动窗口来控制流量、针对不同的应用可以使用长连接或短连接。但在短信收发模块和业务逻辑模块之间仍存在并发问题和处理速度不一致问题,所以在短信收发模块和业务逻辑模块之间增加了缓冲池――接收缓冲池和发送缓冲池。缓冲池的另外一个作用是登记每一条收到和发送的短信,这是计费和进一步分析统计的依据。

3.3.3  业务模块

SP服务商短信业务的执行逻辑,随着市场需求的变化经常会发生调整和变动。将通信模块从业务模块分离后,单个业务模块的设计相对简单,而且各个业务模块之间是互相独立的。那么,SP短信平台又是如何根据不同的短信内容,启动相应的业务模块呢?于是任务分配器就应运而生,它是通信模块和业务模块之间的桥梁。

3.4   任务动态分配

任务分配器在于动态的根据收到短信业务类型的特征信息,“唤醒”不同的业务模块。这就像struts中的控制器ActionServlet,能根据接收到不同的URL,去对应不同的Action类。

任务分配器首先需要一个业务描述文件,描述短信业务类型的特征与所需调用的业务模块之间的关系,可以采用XML文件来描述。短信业务类型特征包括短信特服号和短信业务的类别码;业务模块用其相应java类的类名来表示。描述文件基本格式如下:

< business -config>

< business -mappings>

<business  name = "业务名称"

serviceID = "特服号"

businessID = "业务类别码"

type = "业务类名"  />

。。。

</ business -mappings>

</ business -config>

在分配机制中由于在代码阶段无法预知每个业务模块的,类名称是在程序运行时从XML描述文件中取得,所以普通的类实例化方法(如:ClassName clsinstant=new ClassName())无法实现,而必须通过java的运行时链编技术才能有效的得以实现。具体实现的关键语句如下:

Do_Business instance = null;

Class clazz = Class.forName(className);

instance = (Do_Business) clazz.newInstance();

instance.process(MsgPacket);

其中,Do_Business是被所有业务模块继承的一个基类。process()是它的一个接口,所有业务模块都必须通过这个接口实现不同业务逻辑。第二、三行以没某个具体业务的java类名作为输入参数,并实例化此对象。第四行调用了此实例的process方法。java可以根据不同子类而调用各自不同的process方法。

通过这样的一个任务分派器实现了将缓冲区中取来的短信交由相应的业务模块处理。

4. 实现模型的关键技术 

4.1 CMPP协议的消息包解析

按CMPP协议与短信网关通信是接收短信的最主要方式。CMPP协议是建立在TCP/IP上的应用层通信协议。SP短信平台和ISMG之间使用套接字端口7890和7900通信。CMPP协议的消息包格式如图3所示。消息包分为两部分――消息头和消息体,消息头的长度12个字节,消息体的长度为消息头中Total_Length与消息头长度之差。消息体的内容和格式根据消息头中命令字段Command_Id的不同而不同。各类命令的消息体格式见参考文献1。

图 3 CMPP协议的消息包格式

在实现对CMPP协议消息包格式的解析和封装时,采用面向对象思想。把原本按字节顺序组织的消息包,封装成按类组织的消息对象。为今后使用消息包中的数据提供了方便。再加上Java语言利用其对面向对象思想的强大支持,如继承、多态等,有效的提高了编码的方便性和代码的重用性。

4.2  SOAP方式接收短信请求

SOAP方式接收短信请求在短信注册包月业务中使用的最为广泛。SOAP协议是以Http协议为基础。其命令请求和响应的内容都放在Http请求Entity Body中,并采用XML格式,内容类型(Content-Type)为:” text/plain”。 SOAP协议可以使用Apache提供的jar软件包来解析。中国移动所使用SOAP协议的消息格式,请见参考文献1。

5  结束语 

按此模型开发短信平台在苏州某SP服务商,运行良好,而且很好的解决了我国两大网络提供商――中国移动和中国联通的短信协议在并不完全相同的问题。

另外,彩信作为中国移动推出的短信升级版增值服务,其发展速度已经远远超过了移动的预计。SP服务商短信、彩信综合平台将有很好的应用前景。

参考文献 

[1]  中国移动通信互联网短信网关接口协议V2.0 (China Mobile Peer to Peer, CMPP),V2.0,中国移动通信集团公司,2002年

[2]  DSMP规范中的SSO平台接入规范,中国移动通信集团公司,2003年

[3] 《Java SOAP编程指南》,(美) Henry Bequet著,2002年

[4] 《Java线程》,Scott Oaks, Henry Wong著,2003年

[5] 《SMPP Protocol Specification v3.4》,SMPP Developers Forum,http://www.smsforum.net/

[6]  基于状态和变化的统一时空数据模型,郑扣根等,软件学报Vol.12,No.9

转载于:https://www.cnblogs.com/outlookface/archive/2009/06/07/1498299.html

SP服务商Java短信平台的软件模型和实现(吴宏杰,赵雷,杨季文,苏州大学计算机科学和技术学院)...相关推荐

  1. 短信平台专业版软件客户端功能详解源码搭建|移讯云短信系统

    国际短信平台专业版软件客户端功能详解|移讯云短信系统 首页显示 剩余条数 充值总数 提交总数 成功数量 失败数量 未知数量 代发数量 签名数量 最新提交 平台公告 API接口文档 短信发送 发送短信选 ...

  2. java 短信平台_Java通过SMS短信平台实现发短信功能

    本程序是通过使用中国网建提供的SMS短信平台实现的(该平台目前为注册用户提供5条免费短信,3条免费彩信,这足够用于我们测试用了.在使用前需要注册,注册地址为http://sms.webchinese. ...

  3. 短信宝-java短信平台

    /*** @ClassName: SmsSample* @version: 1.0* @description: 短信宝* @author: zhaonian**/import java.io.Buf ...

  4. 通达OA短信平台,通达OA与天瑞短信平台深度集成,安全可靠,方便快捷

    通达OA与天瑞短信平台深度集成 1.通达OA网络办公系统   http://www.tongda2000.com 2.天瑞短信平台 http://www.wasun.cn/ 短信平台登录地址:http ...

  5. 快速选择正规的短信平台的方法

    如今市场上通过短信平台发送信息的企业商家越来越多,短信平台可以说在很多方面进行应用.但是在商家进行对短信平台的筛选时,可是有了选择困难症,因为不知选择一家优秀正规的短信平台,该从哪几个方面进行对短信平 ...

  6. java短信验证码功能发送的验证码如何校验_企业如何选择短信平台才能保障安全和稳定性?...

    现如今互联网不断发展,人们对网络的依赖性越来越大, 伴随而来的网络运营安全问题越来越严重,安全是我们企业都担忧的一个大问题,短信平台的安全性再次被企业所重视起来. 短信验证码日常生活中经常遇到,比如银 ...

  7. KIDSMS手机短信平台软件 v1.00 公开发表

    KidSMS手机短信平台软件是一个以手机短信为平台,具有投票.评论.查询.广告功能的通信终端系统,轻量级是它最大的特点.太多短信系统是使用SP服务商+WEB管理的方式建立的,我称其为托管模式,托管模式 ...

  8. JAVA怎么对接第三方短信平台?短信验证码完整API文档

    验证码短信平台的应用场景,一般包括用户注册.登陆账号.忘记密码.登录异常.支付确认等. 一.用户注册 通常我们会在注册时会用到短信验证码,即用户在网站或软件上注册账号时,企业需要通过验证码确认用户身份 ...

  9. 短信平台软件,支持CMPP, SGIP,ISAG/ISMP协议模块

       供短信平台,彩信平台软件,性能稳定.全国品牌SP平台软件. 短信平台: 1.网关模块 1.1协议处理模块 完备的协议支持:支持最新的协议 中国移动: (MISC 1.6).(CMPP 2.0 ...

最新文章

  1. 雁栖湖会议研讨:计算机能代替程序员吗?
  2. Windows Server2008下MYSQL外网无法访问问题解决
  3. UILabel使用自定义字体
  4. 如何应对内网安全的那些新挑战——威胁不断,防御不止
  5. 网页html生成图片的常用方案
  6. 哔哩哔哩电脑版下载后音频与画面分离,视频没有声音
  7. Chrome 68 运行后整个浏览器窗口变黄/粉色问题修正方法
  8. (Neighbourhood Components Analysis) NCA 近邻成分分析的学习
  9. 远程服务器下载百度网盘中的内容
  10. 【LeetCode】347. Top K Frequent Elements 前 K 个高频元素(Medium)(JAVA)
  11. sap成本流怎么看_SAP计算产品成本的三种方法
  12. 软件测试中系统的功能测试,软件测试中的43个功能测试点(下)
  13. SPV210定时器的PMW定时器2
  14. strtok字符串分割函数
  15. 体寒是不是天生的 体寒四个基本常识须知
  16. vue axios 下载zip 解压报错 responseType blob arraybuffer
  17. HTML中图片的蒙胧效果!
  18. 【seo】网页开发 代码优化 3
  19. 电子商务网站放大效果的三种常用的实现方式。
  20. 阿里、京东、美团等主流互联网公司的最新招聘标准

热门文章

  1. jsoncpp在vs2012下的环境搭建(C++)
  2. C51——AUXR特殊功能寄存器时钟的电磁辐射
  3. 一个嵌入式牛人学习经历
  4. CAN总线协议报文浅析
  5. ntpd服务状态及日志查询方式
  6. 六、HSV颜色空间应用实例——颜色分割提取与替换
  7. Wayland是什么
  8. java自定义数组_Java自定义数组
  9. python计算1的平方减2的平方加3的平方减4的平方怎么算_计算1的平方减2的平方加3的平方减4的平方 – 手机爱问...
  10. 接口文档当中,英文字母代表的含义