MQTT笔记

四层架构

感知层

传感层

平台层

应用层

定义

MQTT是一种基于发布/订阅模式的,轻量级的通讯协议,其架构于TCP/IP协议上,在物联网、移动应用等有着广泛的应用

一次典型的通信流程

1、发布者(publisher)连接到Broker

2、订阅者(Subscriber)连接到Broker,并订阅相关的主题(topic)

3、发布者向Broker发布了一条信息

4、Broker收到了发布方的信息,发现有订阅者订阅了相关主题,将消息转发给订阅者

5、订阅者从Broker接收该信息

市面主流的Broker

1、Mosquitto

2、EMQX

3、HiveMQ

4、ActiveMQ

1和2国内使用较多

Qos服务质量

1、QoS0,At most once,至多一次;

2、QoS1,At least once,至少一次;

3、QoS2,Exactly once,确保只有一次;

聊天室模型

1、每个聊天室都定义一个唯一的MQTT Topic

2、每个用户进入聊天室后,都订阅该Topic

3、如果有用户发言,则向该Topic发送一条信息

4、因为其他用户都订阅了该Topic,则都能收到发言者的信息

异构网络数据通信

需求:

    1、局域网1和局域网2不能相互通信

    2、局域网1的应用需要将业务状态通知给局域网2中的应用

    3、局域网1和局域网2都能上外网

解决方案:

    1、局域网1和局域网2的应用都跟MQTT Broker进行长连接通信

    2、使用订阅/发布模式进行数据通信

移动端消息推送

需求

    1、公共停车泊位车辆状态消息接受场景

    2、车辆驶入或者驶离时,手持POS机必须能及时地收到车辆状态信息

解决方案

    1、停车位的地磁在感应到车辆驶入或者驶离后,通过移动网络或者无线LoRa等方式,发布车辆状态消息到Broker

    2、手持POS机通过订阅的方式,接收到车辆状态信息后,进行消息提醒。收费人员及时移动到相应位置,进行驶入登记或者收费处理等操作。

模拟测试

1、MQTT Explorer

    功能齐全,简单易使用

2、MQTTX

    功能齐全,界面精美,对话式

3、MQTT.fx

    存在时间较久,支持执行JavaScript功能脚本,容易扩展实现自动化

选型考虑因素

基本需求

    1、支持mqtt3.1/mqtt3.1.1协议(可选mqtt5.0)

    2、支持QoS0、QoS1(可选QoS2)

    3、支持验证

    4、支持遗嘱消息

    5、支持多种连接方式:TCP/WebSocket/SSL

高级需求

    1、集群

    2、支持共享订阅

    3、规则引擎

主流库

C语言

    libmosquitto(推荐)

    Eclipse Paho C

    如果MQTT Broker使用的是mosquitto,建议客户端使用libmosquitto进行开发

Java

    Ecilpse Paho Java

    Fusesource mqtt-client(推荐)

Javascript

    Eclipse Paho HTML5 JavaScript over WebSocket

    mqtt.js(推荐)

Python

    Eclipse Paho Python - originally the mosquitto Python client(推荐)

    MQTT for twisted python

你可能感兴趣的:(MQTT笔记)