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 - 想要取消订阅的主题名称
转载于:https://www.cnblogs.com/shouke/p/10157655.html
Tsung MQTT协议简介及MQTT xml文档配置介绍相关推荐
- Qt 读取XML文档的简单示例
目录名字 XML简介 Qt 操作XML文档一般方法 使用DOM读取XML文档 示例代码:读取XML文档 XML简介 XML(Extensible Markup Language,可扩展标记语言)是一种 ...
- springboot使用DOM4J解析XML文档
目录 一.dom4j简介 二.XML文档操作 1.添加依赖 2.读取XML文件,获得document对象 3.节点操作 4.属性操作 5.将文档写入XML文件 6.添加节点(示例) 7.删除节点(示例 ...
- 原理简介_消息通信的利器MQTT协议简介及协议原理
- 没用过但是必须得知道系列 - 前言: 相比于 XMPP, MQTT 的简单轻量受到了不少工程师的喜爱,从物联网到传统的消息服务,简单可依赖的 MQTT 到底为何让人如此着迷呢? MQTT 协议-M ...
- 智能手环---MQTT协议简介及协议原理
更新记录链接:STM32系统学习-目录_嵌入式学习_force的博客-CSDN博客 文章目录 MQTT协议 MQTT协议简介 MQTT通信模型 MQTT客户端的功能: MQTT客户服务器功能: 消息主 ...
- MQTT协议简介及协议原理
文章目录 MQTT协议 MQTT协议简介 MQTT通信模型 MQTT客户端的功能: MQTT客户服务器功能: 消息主题与服务质量 MQTT控制报文 固定报头 可变报头 CONNECT报文 CONNAC ...
- html5 xml文本编辑,简介XML文档的阅读与编辑
阅读器以使用简单的文本编辑器或者任意浏览器查看 XML 文档.大多数主流浏览器都支持 XML.可以通过双击 XML 文档(如果是一个本地文件)或者在地址栏输入 URL 路径(如果文件位于服务器上)的方 ...
- XML文档类型定义DTD
DTD概述 DTD用来定义XML文档的结构,它包含一系列规则说明,以确保XML文档的一致性和有效性 DTD定义了XML文档可用的词汇(元素和属性的名称)和结构: 元素名称,包括根元素 元素的属性及属性 ...
- 用C#读取XML文档
本文将以一个非常简单的例子来说明如何使用C#访问一个XML文件并且读取其中的信息.例子本身并无任何实际意义,它只是简单的介绍了如何调用微软的XML标准以及如何运用到实际当中去.希望能够对初次接触C#或 ...
- ssis导入xml_使用SSIS包将XML文档导入SQL Server表
ssis导入xml This article guides you through importing XML documents into SQL tables using SSIS package ...
最新文章
- RabbitMQ和Kafka到底怎么选?
- thinkphp如何跨模块调用方法呢?
- Ruby和SHELL中如何遍历指定目录的文件
- java string逆序_java经典入门算法题,java初学者必备
- LamBda学习(一)
- Struts中ActionActionForm
- 如何优雅的定义 App 的界面设计
- [转载] Python List index方法
- mysql 几何对象,几何(geometry)对象类型
- MFC 用Gdiplus画曲线和直线
- 企业信息安全整体架构
- java 中文文件路径乱码 解决方法
- step14. ubuntu18.04下载安装scala(转)
- 网络基础知识之报文格式介绍
- python读取地震信号【sgy,segy】
- Agilent安捷伦34401A|34461A|3458a数字万用表软件NS-Multimeter
- win10右键闪退到桌面_win10打开控制面板总闪退弹回桌面怎么办
- 人工智能技术概述与入门
- 基于ESP32(Micropython)的天气显示+B站粉丝数显示-v4
- Building Maintainable Software-java篇之Couple Architecture Components Loosely