中国移动企业短信通平台EMPP协议分析

标签: 中国移动 企业 短信 | 发表时间:2017-02-08 12:02 | 作者:herman_liu76
出处:http://www.iteye.com
中国移动企信通地址:http://sms.sh.chinamobile.com/qxt/index.jsp

    最近要为手上一个项目设计短信发送,简单分析了一下,最终将使用中国移动企信通作为工具。简单总结一下:

一、选择短信发送方案
1.MAS方式:

    需要采用硬件设备,还要上机架,进行软件安装与配置,非常繁琐,并且成本比较高。
    听某使用mas机的项目反映,延时比较严重,从几分钟,甚至出现过十几分钟的情况。当然可能是设备老旧了。
    放弃!

2.阿里大于
    阿里的东西当然好了,网站上资料很全,但了解同事项目还没有人用过。最主要的一个问题是发送人手机号不能固定吧。
手机端接收显示的号码是106开头的正规号码 显号规则:
a.号码=通道号+扩展码;
b.在通道不稳定、网络抖动及机房断电等不可抗拒的因素下,为确保到达率及到达时间,会自动切换通道,通道号会发生变化。
    不知道不知道拆分的短信之间号码变不变,不知道可不可以牺牲达率与时间,保证显示号码不变呢?

3.移动企信通EMPP
    提供了EMPPAPI,并且有相关文档和简单示例。

    最终不知为何选择移动,反正研究起来EMPP。

二、移动EMPP
    有一个企信通平台,企业用户通过分配给自己的账号登录进移动平台,可以发送短信,收到状态,收到回复等功能。自己的应用程序可以使用提供的EmppAPI使用这些功能。
    估计通过API发的短信,在平台里登录也能看到。

    代码在看过阿里的DUBBO后,再看EMPP就简单多了,它也不用NIO。在TCP协议上设计了一个EMPP协议,就简单的用socket编程,主要是把信息对象转成设计好的BYTE[],发给平台,平台有返回BYTE[]流,再解析出对象来。通常都有消息头与消息体的设计。
   
    1.EmppApi.java与RecvListener.java
    这两个是使用的核心类,EmppApi中一但与远程主机进行连接时,会启动两个线程:

RecvThread:目的是不断接收主机发送过来的信息,生成EMPPObject对象。
buffer=connection.receive(12);
buffer.appendBuffer=connection.receive(length - 12);
EMPPObject.createEMPP(buffer);
EMPPObject实际上有很多具体的类型,包括与主机通讯的各情况。

SendActiveThread:目标是不断发送检测对象,保持与主机的tcp连接。
connection.send(emppActiveTest)。

    无论是发送与接收,都是通过socket上的输入输出流来处理的,比较简单。

    2.监听器RecvListener
EmppApi emppApi = new EmppApi();
RecvListener listener = new RecvListener(emppApi);
EMPPConnectResp response = emppApi.connect(host, port, accountId,
password, listener);

     简单的看上面的关系,大BOSS先出生,再生成一个秘书,同时把BOSS传给它,即给BOSS配置了秘书。BOSS干活的时候,把秘书传进去。
     秘书有什么用呢?BOSS不是内部有线程一直在接收吗?接收到了信息,就让秘书去处理。有意思的是OnClosed方法,当收到掉线信息了,那秘书的工作是:新建一个秘书,配置给BOSS来用于重联。

RecvListener listener = new RecvListener(emppApi)
...
emppApi.reConnect(listener);

    另外有一个ByteBuffer类,处理byte[]时很方便。

    3.与协议相关的比较多的细节技术有:
    复制:System.arraycopy.这是一个native方法。
    移位:intBuf[3] = (byte)(data & 255);
    转换:getBytes(编码)。

三、nio与netty
    看到这个EMPPAPI中的技术太旧了,源码是2008年的。简单回顾一下nio吧。
    nio是TCP通信编辑技术io处理的新版本,非阻塞式io,netty是基于nio的一个编程框架。
    老的io是服务器收到一个TCP连接就建一个线程,客户发送完信息就线程等待着读socket上的通道。这两个过程都是阻塞线程。当然客户端发送信息没有任何关系,发送想发就发,想写就写,只是读被阻塞了,它会一直等到数据到来时(或超时)才会返回。
    服务器与客户机等待的时候都是阻塞着的。就是因为阻塞着,怎么办呢?那设计一个统一的线程(公共服务员)去侦听,等到有结果了再通知我,而我不用一直守着,想干嘛就干嘛去。有点象异步通信,有点象回调。

    对于客户端:
      a.先产生一个selector(公共服务员),本通道再服务员处登记一下。
        this.selector = Selector.open(); 
        // 客户端连接服务器,其实方法执行并没有实现连接,需要在listen()方法中调 
        //用channel.finishConnect();才能完成连接 
        channel.connect(new InetSocketAddress(ip,port)); 
        //将通道管理器和该通道绑定,并为该通道注册SelectionKey.OP_CONNECT事件。 
        channel.register(selector, SelectionKey.OP_CONNECT); 
        channel现在可以做其它事情了...

      b.如果发生了登记的事情
        SocketChannel channel = (SocketChannel) key.channel();
        相关的channel找到了,就可以接着对这个事情做出反馈了。
        channel.write(ByteBuffer.wrap(new String("向服务端发送了一条信息").getBytes()));

      对于服务器:
        serverChannel.register(selector, SelectionKey.OP_ACCEPT);
        上一句也注册了,接下来可以做其它事情了...
        SocketChannel是serverChannel接受好连接产生的通道。是否可以按用户记录在map中,服务器想主动发信息时,可以查询map,找到可用的channel来用?
        ServerSocketChannel/SocketChannel前者用于接收呼入的请求(即第一次握手),而后者负责具体的业务处理(即第一次握手成功后,交由其处理)

   

   
   
   


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [中国移动 企业 短信] 推荐:

中国移动企业短信通平台EMPP协议分析

- - 行业应用 - ITeye博客
中国移动企信通地址:http://sms.sh.chinamobile.com/qxt/index.jsp.     最近要为手上一个项目设计短信发送,简单分析了一下,最终将使用中国移动企信通作为工具.     需要采用硬件设备,还要上机架,进行软件安装与配置,非常繁琐,并且成本比较高.     听某使用mas机的项目反映,延时比较严重,从几分钟,甚至出现过十几分钟的情况.

Google 可以搜出中国移动手机用户的个人短信内容?!

- KK - YesKafei Daily
在谷歌的输入框中输入“filetype:txt site:10086.cn”进行搜索,反馈的结果页面让人惊掉了下巴:中国移动手机用户的私人短信竟然被显示出来. 如果注意结果页面的链接地址,你该庆幸还是提心吊胆. 因为链接的域名几乎全是gd.10086.cn,也就是说可能只是广东移动用户的短信被搜索出来.

三个月从idea进化成产品的短信群聊服务GroupMe走向全球,支持中国移动、中国联通和中国电信号码

- Ray - 36氪
去年8月份我们报道过一家在TC Disrupt上诞生的idea并在三个月内做出了产品的创业公司 – GroupMe,当时只有美国手机用户才能使用它的服务与朋友们进行保密的短信群聊. 今天,这款应用推出了3.0版本,增加了私信功能、“Questions”模块以及最重要的,全球接入. 打开网站的注册界面你会发现它支持中国移动、中国联通以及中国电信的手机号码.

中国移动饭局

- Pean - 不许联想
跟我家奶猪约饭局,奶猪要求某些京城文化名人参加. 打一圈电话,听说是奶猪饭局,无人问津. 约在三里屯,我从北二环出发,. 奶猪从炫特区出发,约好六点半. 一小时后,互相通报,我到了安定门,奶猪到了长虹桥. 又过一个小时,我到了雍和宫,奶猪还在长虹桥. 又过了一个小时,我还在雍和宫,奶猪还在长虹桥. 奶猪说:有这时间坐飞机去成都都能吃上饭饭了.

[笑话连篇] 中国移动是SB

- kaletoppest - 水木社区 今日十大热门话题
发信人: onerat (卖男孩的小火柴), 信区: Joke. 发信站: 水木社区 (Sat Oct 29 11:23:47 2011), 站内. 一哥儿们说他老婆去成都出差,等他老婆回来,他在网上查他老婆的手鸡话费,一查发现中国移动没有收取漫游费,高兴得不得了. 他天天晚上和他老婆通电话,一讲十几分钟,最后一分钱漫游费都没收.

中国移动互联网:清一色的NOKIA!

- Jarod - Tech2IPO
随便扫一眼你就发现了,几乎清一色的诺基亚. 诺基亚在其中还牢牢占据着主导地位. 2.iOS和Android在网络搜索和冲浪上的发展快的惊人,它们凭借这些迅速跻身进了上网设备的前五. 我想这个图的下一个版本毫无意外的应该是iOS和Android之间的“帝位”争夺战. 因为很多很多人根本就没有用手机上过网.

中国移动订制Blackberry 8310正式发布

- 无 - cnBeta.COM
Blackberry 8310年初获得入网许可后,就一直受到国人的期待,现在黑莓国内合作服务商中国移动正式提供该型号给签约客户,下面就让我们一同来欣赏这款最新的行货黑莓8310,中国移动订制黑莓8310实拍图:.

流量算什么?从中国移动的未来想到的

- aspirin - cnBeta.COM
感谢yxykjyxykj的投递. 新闻来源:华中科技大学白云黄鹤BBS. 从06年的N70开始用智能手机,用了五年的Smartphone(姑且算塞班是智能的,其实它就是智能的),也用了五年移动网络. 2G时代移动EDGE 网络秒杀一切cugsm,3G时代所谓的用户粘性挡住了我换联通的道路,电信C2000网络价格无敌的行货终端和美国水货不给力的烧号使得电信C2000 在大学校园里几乎没有Android智能终端.

中国移动正式申请支付业务许可证

- FPb - cnBeta.COM
中国移动通信集团湖南有限公司(下称湖南移动)已于昨日递交了“支付业务许可证”申请. 申请业务范围包括互联网支付、移动电话支付、货币汇兑、预付卡发行与受理、银行卡收单这几项业务. 据了解,7月初中国移动支付公司正式成立,命名为“中移电子商务有限公司”,湖南移动为该支付公司唯一股东,负责全资运营.

中国移动发布飞聊Android 1.0.1beta版和S60V3 1.0.1 beta版

- 洞箫 - cnBeta.COM
飞聊FeiLiao Android 1.0.1beta版和FeiLiao S60V3 1.0.1beta版抢先体验,功能如下:. 1、整合飞信好友关系:使用飞信帐号体系登录,给飞信好友免费发消息;. 2、跨网互通:使用飞聊实现移动联通用户互动互通;. 3、沟通能力:免费消息、图片、语音对讲、离线消息通知;.