• 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

  • 相关阅读:
    Moq4在.NET3.5和.NET4版本之间的差异
    TDD中的迭代
    洛谷 3413 萌数
    割点(tarjan)
    hdu-4507 吉哥系列故事——恨7不成妻
    hdu-3709 Balanced Number
    poj-3252 Round Numbers
    hdu 1007 Quoit Design 分治求最近点对
    LA 3905 Meteor 扫描线
    uva 11464
  • 原文地址:https://www.cnblogs.com/yorkyang/p/6305919.html
Copyright © 2020-2023  润新知