MM2协议简介
MM2协议采用TCP协议承载,二进制编码格式。除握手消息和心跳消息外,其它消息结构分为MM2协议头部和业务消息体两部分。
1、MM2消息头定义为定长字段,字段定义固定总长度为(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个字节)
2、MM2消息体定义:
数据类型 是否是必填数据 编码方式 说明
定长数据 是 直接将数据内容写入消息体
定长数据 可选字段 可选标识+数据内容(如果内容存在) 可选字段为1BYTE,0标识不存在,1标识存在,后面跟数据内容。
变长数据 是 长度+数据内容 长度为4个字节
变长数据 可选字段 可选标识+长度+数据内容
上表中的’+’在实际码流中不存在,仅表示顺序关系。
3、通信过程:
MM2协议采用TCP协议承载,支持TCP长连接,不支持TCP短连接。
首先客户端向服务器端发起TCP连接请求建立TCP连接。
TCP连接建立后,客户端向服务器端发送握手请求消息。握手请求消息中包含有客户端的能力信息,服务器端如果允许客户端握手,则返回握手成功响应消息,握手成功响应消息中包含服务器的能力信息。如果握手失败,则服务器返回握手失败响应。重连间隔时间默认为5秒,可修改。
MM2连接建立成功之后,双方需要互相发送心跳消息维持连接。心跳消息没有响应。对于任何一方,如果发现在一段时间内没有收到对端发送过来的任何数据(注意:包括心跳消息、业务消息等任何消息)则主动断开连接,并尝试重连。心跳超时时间应设置大于对端的心跳发送间隔时间。默认设置:心跳间隔时间=2秒,心跳超时时间=心跳间隔时间*2。
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字节标识来表示。
1、MM2和java序列化的性能比较
示例代码:
//序列化对象
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; //28为MM2头长度
}
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序列化.
分享到:
相关推荐
当用户不在网络覆盖范围内或者手机关闭时,MM2协议使得彩信能够被存储在MMSC上,待用户重新上线后可以获取。 3. **MM3协议**:MM3涉及到彩信通知和提示的传递。当有新的彩信到达时,MMSC会通过MM3协议向用户的手机...
这个设计可能还包括错误检查和握手协议,以确保数据的完整性和正确传输。对于初学者或想要深入理解FPGA设计的人来说,研究这个"datamover_mm2s.v"文件会是一次有价值的实践。通过这个设计,可以学习到如何在实际应用...
- **MM2 接口**:MMS_Relay与MMS_Server之间的内部接口,协议由电信设备商决定。 - **MM3 接口**:与传统消息系统互通的接口,采用SMTP协议。 - **MM4 接口**:本地与外地MMSC间的接口,也采用SMTP协议,实现跨MMSC...
这通常包括了基础的初始化程序、外设驱动示例、通信协议实现等,比如GPIO的设置、定时器的配置、串口通信的实现等。这些例程可以帮助开发者快速理解和掌握MM32F302的功能,节省大量时间,提高开发效率。 "MM2F320X ...
"M-Bus仪表总线协议及其应用" M-Bus仪表总线协议是由德国Paderborn大学的Dr. Horst Ziegler与TI公司的Deutschland GmbH和Techem GmbH共同提出的,专门用于公共事业仪表的总线结构,称Meter-Bus,简称M-Bus。M-Bus...
- MM2:MMS Relay与MMSServer之间的交互。 - MM3:MMS Relay/Server与外部服务器之间的交互。 #### 5. 版权声明 文档明确指出3GPP2及其合作伙伴拥有版权,并对文档的复制和分发设定了规则。任何复制请求应直接发送...
### AXI Stream协议及视频流格式 #### 一、AXI Stream协议概述 AXI (Advanced eXtensible Interface) Stream是一种高效的串行数据传输协议,广泛应用于FPGA设计中,尤其是在视频处理领域。该协议简化了数据传输...
安装过程中,系统会引导用户完成必要的步骤,包括接受许可协议、选择安装路径以及可能的自定义配置选项。 关于MUD客户端的特性,MM2K GUI可能包含了以下几点: 1. **用户友好的界面**:通过GUI,用户可以直观地...
MMSC系统包括多个子系统,如MM2、MM3、MM4等,它们分别负责不同功能,例如MM2处理MMS消息的接收、存储和转发,MM3处理MMS用户的认证、授权和计费,MM4处理MMS内容的传输等。MMS终端上的MMS用户代理则承担着编辑、...
- **Socket编程**:实现客户端和服务器之间的通信,理解TCP和UDP协议的区别。 - **HTTP客户端与服务器**:构建基于HTTP的简单服务端和客户端,理解HTTP请求和响应的工作原理。 6. **框架应用** - **Spring框架**...
MMSC(多媒体消息服务中心)是处理MMS(多媒体消息服务)的节点,调试MMSC涉及到mm1和mm2协议,确保MMS的发送、接收、存储转发等功能的可靠性。 调试过程中,通常会涉及以下步骤: - 配置检查:确保所有相关参数...
此外,还提到了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系统的基本组件,必须满足特定要求,例如导线大小0.8mm2 - 1.5mm2,使用聚乙烯绝缘材料,两线绞绕以减少干扰,并且具有低容抗(),不需要屏蔽线,且导线间不能漏电或接地。 Dupline系统中包含三个...
首先,CAN(Controller Area Network)总线是一种广泛应用的车辆通信协议,具有高数据传输速率和可靠性的特点。在大众汽车中,CAN总线分为不同的速度等级,例如驱动系统CAN总线的高速率可达500kbps,而舒适系统CAN...
- **系统结构**:由MMS Relay/Server、MMS用户数据库、HLR、MMS增值应用、计费系统等组成,提供多点互连,如MM1、MM2等参考点,支持WAP或IP实现的通信。 总的来说,中兴通讯的ZXMMSC是MMS服务的关键组成部分,旨在...