`
mgoann
  • 浏览: 253154 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

MM2协议简介

阅读更多

MM2协议简介

MM2协议简介

MM2协议采用TCP协议承载,二进制编码格式。除握手消息和心跳消息外,其它消息结构分为MM2协议头部和业务消息体两部分。

 

1MM2消息头定义为定长字段,字段定义固定总长度为(28个字节)。包括:

Length:消息总长度(4个字节)

MessageType:消息类型(4个字节)

SourceModuleType:源模块类型(2个字节)

SourceModuleID:源模块ID(2个字节)

SourceManagerType:源Manager类型(2个字节)

SourceManagerID:源ManagerID(2个字节)

TargetModuleType:目的模块类型(2个字节)

TargetModuleID:目的模块ID(2个字节)

TargetManagerType:目的ManagerType(2个字节)

TargetManagerID:目的ManagerID(2个字节)

SequenceID:由发送方填写,请求和响应消息必须保持一致(4个字节)

 

2MM2消息体定义:

数据类型 是否是必填数据 编码方式 说明

定长数据 直接将数据内容写入消息体

定长数据 可选字段 可选标识+数据内容(如果内容存在) 可选字段为1BYTE0标识不存在,1标识存在,后面跟数据内容。

变长数据 长度+数据内容 长度为4个字节

变长数据 可选字段 可选标识+长度+数据内容

上表中的’+’在实际码流中不存在,仅表示顺序关系。

 

3、通信过程:

MM2协议采用TCP协议承载,支持TCP长连接,不支持TCP短连接。

首先客户端向服务器端发起TCP连接请求建立TCP连接。

 TCP连接建立后,客户端向服务器端发送握手请求消息。握手请求消息中包含有客户端的能力信息,服务器端如果允许客户端握手,则返回握手成功响应消息,握手成功响应消息中包含服务器的能力信息。如果握手失败,则服务器返回握手失败响应。重连间隔时间默认为5秒,可修改。

 MM2连接建立成功之后,双方需要互相发送心跳消息维持连接。心跳消息没有响应。对于任何一方,如果发现在一段时间内没有收到对端发送过来的任何数据(注意:包括心跳消息、业务消息等任何消息)则主动断开连接,并尝试重连。心跳超时时间应设置大于对端的心跳发送间隔时间。默认设置:心跳间隔时间=2秒,心跳超时时间=心跳间隔时间*2

 

MM2协议特点

 

1.       高效

主要体现为:

(1) 长连接

由于Socket连接的建立和关闭很耗性能,所以MM2只建立一次连接,并把连接一致保持着。所谓的多路复用。

缺点:容易出现断连,

可以通过 netstat na | grep (portId)

命令来判断是否连接(有3种状态:LISTEN(监听)ESTABLISHED(连接)TIME_WAIT(等待)

(2) 约定大于配置

如模块双方通信,一方按照某一顺序封装发送消息,另一方则必须严格按照这个顺序进行读取。可以从MM2协议里看出MM2并没有将基本字段类型和结构体一些附加信息写入传输流中,都是通过约束来完成,这样达到了节省了传输负载,提供性能。

缺点:缺乏灵活性,易出去接口不同步。

可通过tcpdump i lo tcp port (portId) Xo 10000 vv

命令抓包进行问题的确认。

(3) 二进制传输

优点:节省流量,性能提高了。

 

2. 安全

(1) 心跳消息

心跳消息无需响应,由连着的双方互发消息。

(2) 握手消息

在建立Socket连接的时候,发送握手消息,进行身份的确认,确认成功才会进行后续的操作。

握手消息由客户端发起,服务端返回相应的响应消息。

 

3.  异构性

MM2协议中只规定了基本类型如何表示,所以不同编程语言实现的模块可以通过MM2协议来交互。

 

4. 支持各种编解码

 

5. 支持集合、数组、自定义结构体。

其中集合和数据是通过一个特殊的4字节标识来表示。

 

MM2java序列化的性能比较

 

1MM2java序列化的性能比较

   示例代码:

      //序列化对象

        TestSerializable ts = new TestSerializable("1001","zhangshun");

        long time = System.currentTimeMillis();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();;

        ObjectOutputStream oos = null;

        for (int i = 0; i < 100000; i++)

        {

            try

            {

                oos = new ObjectOutputStream(baos);

                oos.writeObject(ts);

            }

            catch (IOException e)

            {

                e.printStackTrace();

            }

        }

        System.out.println("serialize length="+baos.toByteArray().length/(1024*1024) +" M");

        System.out.println("serialize used time:" + (System.currentTimeMillis() - time) +"ms");

       

        time = System.currentTimeMillis();

        //MM2编码封装对象

        TestMM2 tmm = new TestMM2("1001","zhangshun");

        long mmLength = 0;

        for (int i = 0; i < 100000; i++)

        {

            byte[] bb = tmm.toByte();

            mmLength += bb.length + 28; //28MM2头长度

        }

        System.out.println("mm2 length = " + mmLength/(1024*1024) + " M");

        System.out.println("mm2 used time:" + (System.currentTimeMillis() - time) +"ms");

 

运行结果:

serialize length=9 M

serialize used time:1875ms

mm2 length = 4 M

mm2 used time:375ms

从中可以看出MM2性能无论是从时间还是空间都要优于java序列化.

分享到:
评论

相关推荐

    中移动彩信协议MM1-MM8

    当用户不在网络覆盖范围内或者手机关闭时,MM2协议使得彩信能够被存储在MMSC上,待用户重新上线后可以获取。 3. **MM3协议**:MM3涉及到彩信通知和提示的传递。当有新的彩信到达时,MMSC会通过MM3协议向用户的手机...

    datamover_mm2s_fpga_

    这个设计可能还包括错误检查和握手协议,以确保数据的完整性和正确传输。对于初学者或想要深入理解FPGA设计的人来说,研究这个"datamover_mm2s.v"文件会是一次有价值的实践。通过这个设计,可以学习到如何在实际应用...

    彩信业务基础知识 结构 协议 流程

    - **MM2 接口**:MMS_Relay与MMS_Server之间的内部接口,协议由电信设备商决定。 - **MM3 接口**:与传统消息系统互通的接口,采用SMTP协议。 - **MM4 接口**:本地与外地MMSC间的接口,也采用SMTP协议,实现跨MMSC...

    MM2F320X开发资料包

    这通常包括了基础的初始化程序、外设驱动示例、通信协议实现等,比如GPIO的设置、定时器的配置、串口通信的实现等。这些例程可以帮助开发者快速理解和掌握MM32F302的功能,节省大量时间,提高开发效率。 "MM2F320X ...

    M-Bus仪表总线协议及其应用

    "M-Bus仪表总线协议及其应用" M-Bus仪表总线协议是由德国Paderborn大学的Dr. Horst Ziegler与TI公司的Deutschland GmbH和Techem GmbH共同提出的,专门用于公共事业仪表的总线结构,称Meter-Bus,简称M-Bus。M-Bus...

    彩信开发协议3gpp

    - MM2:MMS Relay与MMSServer之间的交互。 - MM3:MMS Relay/Server与外部服务器之间的交互。 #### 5. 版权声明 文档明确指出3GPP2及其合作伙伴拥有版权,并对文档的复制和分发设定了规则。任何复制请求应直接发送...

    AXI Stream协议及视频流格式

    ### AXI Stream协议及视频流格式 #### 一、AXI Stream协议概述 AXI (Advanced eXtensible Interface) Stream是一种高效的串行数据传输协议,广泛应用于FPGA设计中,尤其是在视频处理领域。该协议简化了数据传输...

    MM2K GUI-开源

    安装过程中,系统会引导用户完成必要的步骤,包括接受许可协议、选择安装路径以及可能的自定义配置选项。 关于MUD客户端的特性,MM2K GUI可能包含了以下几点: 1. **用户友好的界面**:通过GUI,用户可以直观地...

    彩信收发原理及网络架构

    MMSC系统包括多个子系统,如MM2、MM3、MM4等,它们分别负责不同功能,例如MM2处理MMS消息的接收、存储和转发,MM3处理MMS用户的认证、授权和计费,MM4处理MMS内容的传输等。MMS终端上的MMS用户代理则承担着编辑、...

    ProgramacionAvanzada2020:ProgrammeraciónAvanzada del grupo 2MM2

    - **Socket编程**:实现客户端和服务器之间的通信,理解TCP和UDP协议的区别。 - **HTTP客户端与服务器**:构建基于HTTP的简单服务端和客户端,理解HTTP请求和响应的工作原理。 6. **框架应用** - **Spring框架**...

    alcatel wap gateway 调试

    MMSC(多媒体消息服务中心)是处理MMS(多媒体消息服务)的节点,调试MMSC涉及到mm1和mm2协议,确保MMS的发送、接收、存储转发等功能的可靠性。 调试过程中,通常会涉及以下步骤: - 配置检查:确保所有相关参数...

    SIEMENS西门子5ST3 COM 辅助_故障信号开关操作手册.pdf

    此外,还提到了0.5 mm2(AWG 20)的导线规格,适用于特定应用。 在故障和警告指示方面,设备配备有LED灯,以不同的闪烁频率和颜色来提示不同状态。例如,当设备无电时,LED灯会关闭;当警告测量值超过阈值(如温度...

    长连接消息发送模型

    "mm2"可能是与3GPP相关的协议或接口,可能是多媒体消息服务(Multimedia Messaging Service,MMS)的一部分,用于发送和接收包含文本、图片、音频或视频等多媒体内容的消息。在这个模型中,可能已经考虑到了3GPP标准...

    卫星激光通信用相机技术参数

    卫星激光通信用相机技术参数中探测极限红外相机积分时间 0.5ms,成像信噪比大于 20 时,能够探测到小于 1.2μw/mm2 的光斑功率。 10.电源输入: 卫星激光通信用相机技术参数中电源输入 12±1 V DC,功耗关闭时,...

    Dupline总线原理

    双绞线是Dupline系统的基本组件,必须满足特定要求,例如导线大小0.8mm2 - 1.5mm2,使用聚乙烯绝缘材料,两线绞绕以减少干扰,并且具有低容抗(),不需要屏蔽线,且导线间不能漏电或接地。 Dupline系统中包含三个...

    大众汽车总线系统组成驱动系统CAN总线高速.ppt

    首先,CAN(Controller Area Network)总线是一种广泛应用的车辆通信协议,具有高数据传输速率和可靠性的特点。在大众汽车中,CAN总线分为不同的速度等级,例如驱动系统CAN总线的高速率可达500kbps,而舒适系统CAN...

    中兴通讯短消息系统未来发展.doc

    - **系统结构**:由MMS Relay/Server、MMS用户数据库、HLR、MMS增值应用、计费系统等组成,提供多点互连,如MM1、MM2等参考点,支持WAP或IP实现的通信。 总的来说,中兴通讯的ZXMMSC是MMS服务的关键组成部分,旨在...

Global site tag (gtag.js) - Google Analytics