创龙小识堂 | 专题片-1:MQTT简介及设计原则 - 创龙小识堂 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2803|回复: 0

创龙小识堂 | 专题片-1:MQTT简介及设计原则

[复制链接]

61

主题

61

帖子

677

积分

创龙

Rank: 8Rank: 8

积分
677
发表于 2018-1-10 15:08:44 | 显示全部楼层 |阅读模式
创龙小识堂 | 专题片-1:MQTT简介及设计原则
(。・∀・)ノ゙嗨,欢迎来到小识堂,好久不见,甚是想念*^-^*~~~
        2018的第一篇,很特别哦,小编Jane将给大家推出首个系列的技术类型专题片,不一样的干货,喜欢的记得转载或留言哦*^-^*

前言:
        MQTT全称是 Message Queue Telemetry Transport,是一个轻量级的“发布/订阅”消息传输协议。非常适用于在嵌入式系统中进行简单数据传输。本系列文章将由浅入深学习 MQTT,并以 omapl138 平台应用程序作为实践示例,完整呈现 MQTT 在嵌入式软件开发中的巨大价值。


一、首先,我们先了解一下 什么是MQTT:

1、简介
        MQTT 全称是 Message Queue Telemetry Transport,是一个轻量级的“发布/订阅”消息传输协议。

2、发布/订阅
        MQTT 的基本概念是发布消息、订阅主题,即“pub/sub”。这需要有一个消息分发服务器和一个或多个客户端。当然,只有一个客户端也就没有意义了。每一个客户端可以订阅某些主题,可以发送各种主题的消息。服务器收到客户端的主题消息后发送给订阅这个主题的所有客户端。服务器的设计理念是使用简单、通用的接口,使得可以接受各种各样的客户端实现。比如说在一个传感器上的客户端,需要写数据到数据库的客户端,等等。

3、主题/订阅
        主题的设置可以带有多个层级。层级之间通过斜杠 '/' 进行分隔。这样一个简单的设计可以达到非常灵活的订阅效果。用学校里的学生来举例: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/ 都是合法的主题设置。

4、消息传递服务质量
        消息在客户端发送给服务器、服务器发送给客户端时,都可以设置对应的发送服务质量。一共有三个等级,等级越高越可靠。
         0:最多发送一次。消息只发送一次,没有接收确认。可能会由于网络环境较差导致没有准确送达。适合有定期数据发送,丢掉一两个数据无所谓的情况。
·         1:最少发送一次。有接收确认。但网络较差或其他情况有可能导致消息重复发送,接收端多次收到同一份数据。
·         2:确保发送一次。通过四次握手确保消息准确送达而且只送达一次。
        需要根据具体的应用场景选择合适的级别。高可靠性意味着较高的延迟和较大的带宽需求。

5、消息保留
        客户端发送的消息可以设置消息保留属性。可以使得这条消息发送到分发服务器之后,后面才连接进来而又订阅了这个条消息主题的客户端依然能够获取到它。适用于一些发送频率很低的消息。

6、简单会话/持久会话
        客户端建立连接时设置该会话的属性。如果是简单会话(clean session),当它断开连接后又重新接入,虽然是同一个客户端,但先前的所有订阅都会被清空,需要重新进行订阅。如果是持久会话(durable session),则重新连接后可以保留先前订阅的主题,无需重新进行订阅。

7、客户端遗言
        客户端可以设定“遗言”,在它因某种原因与服务器断开时发送最后一条消息。这条消息和其他消息一样,有主题、发送服务质量、消息留存属性。

二、然后再谈谈什么是 MQTT 的设计原则:

1、简单
        没有杂七杂八的花俏功能,作为一个基础组件构建实用的系统,易于实现。

2、 “发布/订阅”消息传递方式
        随时接入随时发布、接收消息,无需太多其他“事先约定”的规则。

3、无需复杂管理
        智能响应未定义行为保证正常工作。例如可以动态地创建所需主题,然后就发布。

4、最小化传输的附带信息。
        在真正要传说的信息基础上只添加最少量的辅助信息,例如包头。降低带宽依赖,提高传输效率。

5、适应于低质量网络环境。
        低带宽、高延迟、不稳定、高费用的网络环境。

6、简单会话/持久会话
        客户端建立连接时设置该会话的属性。如果是简单会话(clean session),当它断开连接后又重新接入,虽然是同一个客户端,但先前的所有订阅都会被清空,需要重新进行订阅。如果是持久会话(durable session),则重新连接后可以保留先前订阅的主题,无需重新进行订阅。

7、满足低性能客户端。

8、提供多种的传输服务质量级别。

9、不限定数据格式。


        本系列文章将由浅入深学习 MQTT。
       小编Jane,今天就先为大家讲解两个知识点。后续更加精彩!下节课堂分享:如何移植 MQTT broker mosquitto 到 omapl138。敬请留意。


本文来源于:广州创龙-廖工 原创



想更多地了解广州创龙,欢迎与我们联系:

销售邮箱:sales@tronlong.com
技术邮箱:support@tronlong.com
创龙总机:020-8998-6280
技术热线:020-3893-9734
创龙官网:www.tronlong.com
技术论坛:www.51ele.net
线上商城:https://tronlong.taobao.com

【长按识别二维码关注我们】
创龙公众号.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-4-16 18:51 , Processed in 0.037923 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表