1.    引言 

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

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

2.    背景介绍 

2.1常用缩略语 

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

java短信模板参数如何替换_Java

表 1 缩略语说明 

2.2网络平台的结构和原理 

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

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

java短信模板参数如何替换_业务逻辑_02

图-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。

java短信模板参数如何替换_Java_03

图 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。 

java短信模板参数如何替换_缓冲池_04

图 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