mqtt介绍&协议解析

1. MQTT协议简介

  物联网(Internet of Things,IoT)最近曝光率越来越高。虽然HTTP是网页的事实标准,不过机器之间(Machine-to-Machine,M2M)的大规模沟通需要不同的模式:之前的请求/回答(Request/Response)模式不再合适,取而代之的是发布/订阅(Publish/Subscribe)模式。这就是轻量级、可扩展的MQTT(Message Queuing Telemetry Transport)可以施展拳脚的舞台

  • 基于TCP/IP协议

  • 轻量级的消息订阅和发布(publish/subscribe)协议

  • 主要用于 物联网 — IoT(internet of things)  或 M2M(Machine to Machine) communication,机器端到端通信,比如传感器之间的数据通讯

   因为是M2M,需要考虑:

   (1)Machine,或者叫设备,比如温度传感器,硬件能力很弱,协议要考虑尽量小的资源消耗,比如计算能力和存储等

   (2)M2M可能是无线连接,网络不稳定,带宽也比较小

2. 使用场景

MQTT是基于二进制消息的发布/订阅编程模式的消息协议,最早由IBM提出的,如今已经成为OASIS规范。由于规范很简单,非常适合需要低功耗和网络带宽有限的IoT场景,比如:

  • 遥感数据
  • 汽车
  • 智能家居
  • 智慧城市
  • 医疗医护

  MQTT协议的架构,用一个示例说明。比如有1个温度传感器(1个Machine),2个小的显示屏(2个Machine),显示屏要显示温度传感器的温度值。

  显示器需要先通过MQTT协议subscribe(订阅)一个比如叫 temperature 的topic(主题):

  当温度传感器publish(发布)温度数据,显示器就可以收到了:

  协议里还有2个主要的角色:

    1. client,客户端
    2. broker,服务器端

  它们是通过TCP/IP协议连接的。

  因为MQTT是协议,所以不能拿来直接用的,就好比HTTP协议一样。需要找实现这个协议的库或者服务器来运行。

3. 基于 MQTT协议的server端

  emqtt

http://docs.emqtt.cn/zh_CN/latest/getstarted.html#c1000k

     mosquitto

http://mosquitto.org/

http://blog.csdn.net/xukai871105/article/details/39252653

  

4. 基于 MQTT协议的client端

5. MQTT 功能使用

  协议详解 

      协议规范:MQTT V3.1 Protocol Specification (http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html)
  1. QoS

QoS在MQTT中有(摘自MQ 遥测传输 (MQTT) V3.1 协议规范):

  1. “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  2. “至少一次”,确保消息到达,但消息重复可能会发生。
  3. “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
  1. 接收离线消息

接收离线消息的客户端

  1. 客户端订阅设置QoS=1
  2. 客户端连接属性clean: false,作用是断开连接重连的时候服务器端帮助恢复session,不需要再次订阅

收到消息的顺序是乱的,为什么会这样,其实很好理解,为了小型受限设备以及网络不稳定的情况,消息是不好保证顺序的。

解决办法是发送的消息带时间戳,接收后再做排序。

另外,担心客户端没有做client.end()而非正常退出,那么再次连接是否能恢复session,测试了一下,注释client.end(),没有问题,正常收到多条离线消息。

  ssh连接

    协议实现
    问题:server怎么处理终端的重复订阅?

 参考链接:http://dataguild.org/?p=6817

原文地址:https://www.cnblogs.com/yorkyang/p/6305919.html