• 协议开发 中移动CMPP2.0协议API(一)


     

    协议开发 中移动CMPP2.0协议API(一)

     

    云网(jimzj@21cn.om)

     

           前段时间,一直忙于公司的短信接口的开发;虽然总是忙,但还是很有收获的。从短信开接口的开发中也碰到不少问题,相信和我一样,大家在开发网关接口时也会有不少问题会碰到的:比如,采用移动提供的API出错,不同的编码,计费拔测,接收问题等。其实对于自己的上层领导来说,他所要的是结果,致于开发过程中你所遇到的各种问题都是自己去解决的,不懂就上网找,或者说问一下有这方面开发经验的朋友或同学。正是由于不同的开发人员在做CMPP(移动)协议或者是SGIP(联通)、SMGP(小灵通)协议时所碰到的问题相信有很大一部分是一样的,在这里我就把我开发过程中的一些碰到的问题和经验写出来,希望对准备开发短信网关协议的开发人员有一定的帮助,同时也希望大家如果有更好的经验也可以贴出来,这样可以使大家在开发上都会轻松一些。不过大家也可以到这个网站http://skybird.9s9s.com/bbs/index.asp。可以说我也是从上面学到不少东西,在这先感谢各位贴出自己经验的朋友。

     

           说了这么多费话,下面还是转入正题了。下面说主要以中移动的CMPP2.0协议来说明,还会说到API的开发的问题,希望对于想自己开发API的朋友也有一定帮助。

           对开手上还没有CMPP协议的朋友,可以到上面说的那个网站去下载,可以以直接到http://www.gd.chinamobile.com/(广州移动)上面下载。对于广州移动所用的是华为的短信网关,在接入是移动方面提供了网关二次开发的API,不过相信用过华为提供的API的人总会是有苦说不出,在这里我也不再多用评论,因为最初时间比较紧迫,所以也用过这个API的,但最终还是自已去开发了。

     

           移动梦网和联通在信都是构建在有中国特色的短信网关部件基础上的,亚信为中国移动设计的CMPP协议规范,中国联通的SGIP规范都是为这个短信网关提供的互联网接口标准,可以看出二者都是借鉴GSM SMPP协议的两种简化版。

     

           CMPP提供了基于TCP的长连接接口和短连接接口标准,SGIP提供了基于TCPHTTP/TCP的短连接接口标准。CMPP中的短信网关为TCP服务器,通过接收SP发起的TCP连接来发送MT/MO/Report/Resp等消息。SGIP中发送MT/MTResp时是短信网关为TCP服务器,发送MO/MOResp/Report/ReportResp时短信网关作为TCP客户端。

     

           长连接接口

           通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。 

    短连接接口

           通信双方以客户-服务器方式建立TCP连接,应答与请求在同一个连接中完成。系统采用客户/服务器模式,操作以客户端驱动方式发起连接请求,完成一次操作后关闭此连接。

    设计CMPP 协议API模块,要考虑以下几个问题:

    1、 链路检测。类似链路检测的长连接维持机制,为每个连接,在最后一个消息的处理结束前,重新启动一个60秒(可以自定义时间长短)的定时器。如果期间有消息来往,停止定时器,处理完消息后,继续启动定时器。如果60秒超时,重新启动定时器,连续三次超时,关闭这个链接,重新启动建立过程

     

    2、 超时重发和差错重发。超时重发的原理是发送每个MT消息后,启动一个60秒的定时器,等待网关返回应答。如果超时,继续发送,连续3次都超时都没有应答,关闭连接,启动链路恢复过程。并返回一个发送超时的信息给调用这个API的用户接口。差错重发是接受到错误的应答,并且这个错误是由对等通信双方的协议层产生的,那么重新发送这条消息。

     

    3、 滑动窗口控制流量。可以实现流量控制和有效的负载均衡。滑动窗口大小为16条消息。采用异步方式,一次发送16(称动建议值)条消息,并等待应答,每成功一个应答,窗口缩小,然后再从缓存取一个发送,填满窗口。但为了保证每一个发送的直接回应,可以只设置滑动窗口大小为1条消息,这样调用API的客户端程序可以直接得到发送的回应结果。方便客户端程序的自由的自动重发机制。

     

    4、 消息重复处理。缓存当前所接收到的消息编号,保证所收到的消不能是回转重复。这个编号要靠短信网关来控制唯一性。当然,自已发送的数据包也要保证在一个链接段内时唯一的,这样才能保证数据的正确性。

     

    5、 短信网关消息接收缓存。如要采用回调函数的方法传送接收信息给调用API的客户端程序,可以不考虑接收缓存,而采用API缓存方式接收时,要注意控制接收的量,以保证信息处理的及时性。

     

    6、 有序控制。是保障先来的消息,先发送出去,后来的后发,严格地保障先后顺序。是通过序列号和滑动窗口来保障的。实际应用中,倒是不那么严格地关注顺序发送问题。

     

    上面说了这么多都是一些技术结构上的问题,并没有实际到开发中的问题。其实做为一个开发人员,首先要做好的就是整个架构搭建的问题,代码实现是其次。因为有了好的架构,实现起来并不是很难(对于经常开发项目的开发人员来说),可以说是磨刀不误砍柴功。下面结给API的开发来说一下CMPP协议的开发。

    待续......


  • 相关阅读:
    Android(java)学习笔记197:ContentProvider使用之内容观察者02
    数据库连接池--druid
    在java中导出excel
    对excel进行封装
    创建excel,合并单元格,设置单元格样式
    认识Excel并创建一个excel(网址:http://poi.apache.org/)
    认识单元测试(jar包资源网址:http://search.maven.org/)
    Echarts在java中使用
    认识Echarts(网址:http://echarts.baidu.com/tutorial.html#ECharts%20%E7%89%B9%E6%80%A7%E4%BB%8B%E7%BB%8D)
    制作缩略图
  • 原文地址:https://www.cnblogs.com/bobox/p/626008.html
Copyright © 2020-2023  润新知