MQTT 简介
MQTT 全称是 Message Queue Telemetry Transport,是一个轻量级的“发布/订阅”消息传输协议。
发布/订阅
MQTT 的基本概念是发布消息、订阅主题,即“pub/sub”。这需要有一个消息分发服务器和一个或多个客户端。当然,只有一个客户端也就没有意义了。每一个客户端可以订阅某些主题,可以发送各种主题的消息。服务器收到客户端的主题消息后发送给订阅这个主题的所有客户端。服务器的设计理念是使用简单、通用的接口,使得可以接受各种各样的客户端实现。比如说在一个传感器上的客户端,需要写数据到数据库的客户端,等等。
主题/订阅
主题的设置可以带有多个层级。层级之间通过斜杠 '/' 进行分隔。这样一个简单的设计可以达到非常灵活的订阅效果。用学校里的学生来举例:school-name/grade/class/student-name。这样一个主题具体到某一个学生,但同时带有很有用的上级信息。
而对主题的订阅,可以使用两个通配符 '+' 和 '#'。+ 号可以匹配主题的一个层级,而 # 号可以匹配主题的一个或多个层级。有了通配符,就可以做到一个订阅,获取到多个符合条件的主题了。例如对于上述类型的学生主题,可能有以下几种:
① A 学校一年级二班的张三:A/1/2/zhangsan
② A 学校二年级二班的张三:A/2/2/zhangsan
③ B 学校一年级三班的张三:B/1/3/zhangsan
④ C 学校二年级三班的张三:C/2/3/zhangsan
订阅规则:
① 订阅 A 学校一年级二班所有的学生:A/1/2/+ —— 订阅上述主题①
② 订阅所有学校叫张三的学生:#/zhangsan —— 订阅上述所有四个主题
值得注意的是,主题所有层级的字段都可以为空,例如 /1/2、A//2、A/1/ 都是合法的主题设置。
消息传递服务质量
消息在客户端发送给服务器、服务器发送给客户端时,都可以设置对应的发送服务质量。一共有三个等级,等级越高越可靠。
- 0:最多发送一次。消息只发送一次,没有接收确认。可能会由于网络环境较差导致没有准确送达。适合有定期数据发送,丢掉一两个数据无所谓的情况。
- 1:最少发送一次。有接收确认。但网络较差或其他情况有可能导致消息重复发送,接收端多次收到同一份数据。
- 2:确保发送一次。通过四次握手确保消息准确送达而且只送达一次。
需要根据具体的应用场景选择合适的级别。高可靠性意味着较高的延迟和较大的带宽需求。
消息保留
客户端发送的消息可以设置消息保留属性。可以使得这条消息发送到分发服务器之后,后面才连接进来而又订阅了这个条消息主题的客户端依然能够获取到它。适用于一些发送频率很低的消息。
简单会话/持久会话
客户端建立连接时设置该会话的属性。如果是简单会话(clean session),当它断开连接后又重新接入,虽然是同一个客户端,但先前的所有订阅都会被清空,需要重新进行订阅。如果是持久会话(durable session),则重新连接后可以保留先前订阅的主题,无需重新进行订阅。
客户端遗言
客户端可以设定“遗言”,在它因某种原因与服务器断开时发送最后一条消息。这条消息和其他消息一样,有主题、发送服务质量、消息留存属性。
参考:http://mosquitto.org/man/mqtt-7.html
2017-05-26 - 廖杰良
MQTT 简介的更多相关文章
- Mosquitto搭建Android推送服务(一)MQTT简介
总体概要: MQTT系列文章分为4部分 1.MQTT简介 2.mosquitto服务器搭建 3.编写Mosquitto的可视化工具 4.使用Mosquitto完成Android推送服务 文章钢要: 对 ...
- MQTT简介
MQTT简介 MQTT是IBM开发的一个即时通讯协议,该协议支持所有的平台,几乎可以把所有联网的物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议 MQTT的特 ...
- 【随笔】MQTT简介
我们知道,将用户使用的设备称为客户端,将提供给用户信息的端口称为服务器端.两个端口之间可以通过多种通信协议进行交互,比如HTTP(同步)或者基于消息传递的异步. HTTP是一种同步无状态的协议,不支持 ...
- MQTT 简介及协议原理
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种构建于TCP/IP协议上基于发布/订阅(publish/subscribe)模式的“轻量 ...
- MQTT简介-(转自cacard)
MQTT - MQ Telemetry Transport 轻量级的 machine-to-machine 通信协议. publish/subscribe模式. 基于TCP/IP. 支持QoS. ...
- MQTT入门篇
物联网(Internet of Things,IoT)最近曝光率越来越高.虽然HTTP是网页的事实标准,不过机器之间(Machine-to-Machine,M2M)的大规模沟通需要不同的模式:之前的请 ...
- 玩转物联网之MQTT
物联网概述 物联网——即Internet-of-Things,其实这个概念由来已久,简单来讲,物联网是物与物.人与物之间的信息传递与控制简称.它和能源.电子信息.医疗.交通.零售.物流.工业制造等行业 ...
- MQTT详解以及在IoT中的应用
MQTT定义: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台, ...
- 服务器 三 MQTT服务器手机开发
目的: 实现手机4G网络控制单片机,需要搭建服务器,手机或者各种控制端远程控制. 本教程 1 MQTT服务器硬件模块 2 MQTT服务器电脑搭建 2.1自己搭建 2.2租阿里云服务器 2 MQTT服 ...
随机推荐
- C#中抽象类与接口的区别
1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分.或者说,它是面向对象 ...
- C# WinForm程序添加启动画面
如果程序在装载时需要进行较长时间的处理,最好使用启动画面,一方面美化程序,一方面可以不使用户面对着一片空白的程序界面. 我手头上一个小项目主界面启动时需要检查用户文件及运行环境是否有效,需要一段时间处 ...
- python进阶---Python中的socket编程
初识socket编程 一.前言 socket基于C\S架构(客户端\服务端)的编程模型,在Python中是以socket模块存在的. Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是 ...
- MySQL相关的书籍
http://item.jd.com/11389754.htmlhttp://item.jd.com/11390423.html http://item.jd.com/11398721.html
- C#值参数和引用参数
一.值参数 未用ref或out修饰符声明的参数为值参数. 使用值参数,通过将实参的值复制到形参的方式,把数据传递到方法.方法被调用时,系统做如下操作. 在栈中为形参分配空间. 复制实参到形参. 值参数 ...
- 基于MyBatis的数据服务接口
背景 作为软件系统开发,数据操作是系统开发不可避免的一个重要组成部分.因为其重要性围绕着数据操作也出现了众多框架.成熟框架是为了普适众多数据操作要求的,因此为了更好的实现技术落地,需要对框架进行丰富和 ...
- iPhone X 网页导航概念
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 在移动应用程序设计中,选择汉堡菜单按钮还是标签栏作为导航一直是个古老的争论话题.目前看来,由于 ...
- LKD: Chapter 7 Interrupts and Interrupt Handlers
Recently I realized my English is still far from good. So in order to improve my English, I must not ...
- 常见优化算法统一框架下的实现:最速下降法,partan加速的最速下降法,共轭梯度法,牛顿法,拟牛顿法,黄金分割法,二次插值法
常见优化算法实现 这里实现的主要算法有: 一维搜索方法: 黄金分割法 二次差值法 多维搜索算法 最速下降法 partan加速的最速下降法 共轭梯度法 牛顿法 拟牛顿法 使用函数表示一个用于优化的目标, ...
- linux网络、性能相关命令
netstat -tunpl #查看进程列表 top #查看系统资源统计 服务器速度测试 ping 123.57.92.9 -t 每一个被发送出的IP信息包都有一个TTL域,该域被设置为一个较高的数值 ...