Tsung MQTT协议简介及MQTT xml文档配置介绍
MQTT协议简介及MQTT xml文档配置介绍
by:授客 QQ:1033553122
1. MQTT协议介绍
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上。
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
2. MQTT协议原理

- 实现MQTT协议需要:客户端和服务器端
- MQTT协议中有三种身份:发布者(publishers)、代理(Broker,服务器)、订阅者(Subscriber)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
- MQTT传输的消息分为:主题(Topic)和负载(payload)两部分
Topic - 可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)
payload - 可以理解为消息的内容,是指订阅者具体要使用的内容
参考连接:http://itbilu.com/other/relate/4kHBsx_Pg.html#mqtt-topic
3. 方法
3.1 connect
连接服务器
<request>
<mqtt type="connect" clean_start="true" keepalive="20" will_topic="will_topic" will_qos="0" will_msg="will_msg" will_retain="false">
</mqtt>
</request>
说明:
连接
clean_start - true:开启一个新的会话。false:不清空会话信息,沿用之前相同Client_id的会话
keepalive - 以秒为单位,会话心跳时间,即从客户端传输一个控制报文结束到开始传输下一个控制报文,允许的最大时间间隔。客户端必须保证控制报文之间的传输时间间隔不能超过心跳时间。在没发送其它任何控制报文的时候,客户端必须发送一个PINGREQ报文。
客户端可以不管keepalive 时间,在任意时刻,发送PINGREQ,一遍检测网络和服务器正在工作。
如果keepalive值不为0,且服务器在1个半的keepalive时间内,没有收到来自客户端的控制报文,必须断开客户端的网络连接,正如网络连接失败
如果keepalive值为0,表示关闭心跳机制,这意味着服务器不要求断开处于不活动状态的客户端
keepalive实际值是由应用程序指定的,通常为几分钟。
will_qos - 指定发布will_msg时的QoS级别。如果Will Flag为0,那么will_qos必须为0,如果Will Flag为1,那么will_qos可以为0,1,2。不能为3。
will_topic - 主题名称
will_msg - 定义要发布到will_topic的应用程序消息。如果客户端意外的断开触发服务器PUBLISH此消息(消息主题名为:will_topic中指定的内容, 消息内容为 will_msg指定的内容)。
will_retain - 用于判断当will_msg发布后,是否保留will_msg。如果Will Flag设置为0,will_retain必须设置为0,如果如果Will Flag设置为1,如果will_retian设置为0,服务器发布will_msg后,必须不保留will_msg消息,如果will_retian设置为1,服务器发布消息will_msg后,必须保留will_msg。tsung中will_retain可选值true(对应1),false(对应0)
参考连接:
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718028
3.2 publish
发布消息
<request subst="true">
<mqtt type="publish" topic="test_topic" qos="1"
retained="true">test_message
</mqtt>
</request>
说明:
topic - 主题名称
qos - 值为0:至多发送一次,为1: 至少发布一次,为2: 只发送一次
retained - 如果设置为1,服务器必须存储来自客户端发送给服务器的发布消息中的应用消息和Qos,这样当订阅匹配其主题名称时,把存储的内容发送给订阅者。如果设置为0,服务器必须存储来自客户端发送给服务器的发布消息,且不允许移除、替换已经存在的保留消息。
参考连接:
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718037
3.3 disconnect
断开连接
<request>
<mqtt type="disconnect"></mqtt>
</request>
3.4 subscribe
订阅主题
<request subst="true">
<mqtt type="subscribe" topic="test_topic" qos="1"></mqtt>
</request>
说明:
topic - 想要订阅的主题名称
qos - 如果设置为1,针对QoS 0应用程序消息,客户端最多只能收到一份消息,针对Qos 2,客户端可能会收到两份重复的消息。
如果设置为0,以Qos2发送的应用消息在传输给客户端,可能会丢失,而以Qos 1发送的应用消息在传输给客户端时也可能会丢失或者重复。
参考连接:
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718063
3.5 waitForMessages
等待消息
<request>
<mqtt type="waitForMessages" timeout="60"></mqtt>
</request>
说明:
timeout - 设置等待消息超时时间,单位秒
3.6 unsubscribe
取消订阅主题
<request subst="true">
<mqtt type="unsubscribe" topic="test_topic"></mqtt>
</request>
说明:
topic - 想要取消订阅的主题名称
Tsung MQTT协议简介及MQTT xml文档配置介绍的更多相关文章
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- 004Maven_Pom.xml文档的介绍
很重要的一个文档,具体介绍如下:
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
- Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
Oracle 远程访问配置 服务端配置 如果不想自己写,可以通过 Net Manager 来配置. 以下配置文件中的 localhost 改为 ip 地址,否则,远程不能访问. 1.网络监听配置 ...
- XmlReader和XElement组合之读取大型xml文档
简介 在.NET framework 中存在大量操作xml数据的类库和api,但在.NET framework 3.5后我们的首选一般就是linq to xml. linq to xml操作xml数据 ...
- 【JAVA与DOM4J实现对XML文档的CRUD操作】
一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...
- Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)
OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目 ...
- 文档对象模型操作xml文档
简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...
- IOS 解析XML文档
前段时间想找点事做,就是试着看能不能用豆瓣的API做点什么,于是就碰到了这个问题——XML解析. 老师还没讲,只能自己去查. XML文档解析主要有SAX和DOM两种模式,IOS上两种模式都可以用,这里 ...
随机推荐
- 小程序入口构造工具&二维码测试工具
小程序入口构造工具&二维码测试工具 本文将介绍我们小程序中隐藏的两个工具页面.原理虽不复杂,收益却实实在在,或许也能给诸君带来启发. 入口构造工具 痛点 PM&运营 投放链接 PM&a ...
- Java中的enum枚举类
首先说说为什么要写这个enum枚举类吧,是群里有个新手问:怎样把enum类中的值遍历得到,其实自己用的也很少.自己也是确实不知道,于是我去网上搜了不少,总结了些,希望对大家有帮助:首先我说说怎样遍历枚 ...
- elasticsearch 操作
文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 客户端:https://www.elasti ...
- app 压力测试
monkey工具详解 https://blog.csdn.net/jffhy2017/article/details/54572400 ----------------------- Android ...
- springboot redis(单机/集群)
前言 前面redis弄了那么多, 就是为了在项目中使用. 那这里, 就分别来看一下, 单机版和集群版在springboot中的使用吧. 在里面, 我会同时贴出Jedis版, 作为比较. 单机版 1. ...
- zookeeper服务发现实战及原理--spring-cloud-zookeeper源码分析
1.为什么要服务发现? 服务实例的网络位置都是动态分配的.由于扩展.失败和升级,服务实例会经常动态改变,因此,客户端代码需要使用更加复杂的服务发现机制. 2.常见的服务发现开源组件 etcd—用于共享 ...
- 设计模式之装饰模式,session共享的底层原理
前言 还记得当初写spring-session实现分布式集群session的共享的时候,里面有说到利用filter和HttpServletRequestWrapper可以定制自己的getSession ...
- Tomcat8源码笔记(五)组件Container分析
Tomcat8源码笔记(四)Server和Service初始化 介绍过Tomcat中Service的初始化 最先初始化就是Container,而Container初始化过程是咋样的? 说到Contai ...
- 如何用Python编写一个聊天室
一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...
- IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端
IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端 原文:http://docs.identityserver.io/en/release/quicks ...