MQTT - 开始使用

@(嵌入式)

个人开发环境 : ubuntu 14.04


简介

MQTT (MessageQueueing Telemetry Transport Protocol) 全称 消息队列遥感传输协议,是IBM开发的一个即时通讯协议。 MQTT是面向M2M和物联网的连接协议,运行在TCP协议栈之上,采用轻量级发布和订阅消息传输机制。
【MQTT协议角色】— 在MQTT协议中包括发布者,代理器(服务器)和订阅者。
【MQTT协议消息】— MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
【MQTT协议主题】— MQTT中的主题可理解为相同类型或相似类型的消息集合。

Linux 安装使用

安装前提

  • 编译找不到openssl/ssl.h
$ sudo apt-get install libssl-dev
  • 编译过程找不到ares.h
$ sudo apt-get install libc-ares-dev
  • 编译过程找不到uuid/uuid.h
$ sudo apt-get install uuid-dev

安装

我现在使用的版本时1.4.9,后续安装,可以先查看对应目录下最新版本,选择安装。
* 编译安装

# 获取源码
$ wget http://mosquitto.org/files/source/mosquitto-1.4.9.tar.gz
$ tar zxfv mosquitto-1.4.9.tar.gz
$ cd mosquitto-1.4.9
$ make # 编译源码
$ sudo make install # 安装源码
  • 使用过程中找不到libmosquitto.so.1
    如何解决: 修改libmosquitto.so位置
error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
$sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
$ sudo ldconfig

基础测试

  • 打开第一个终端运行代理 : S
$ mosquitto -v  
# -v 打印调试信息
  • 打开第二个终端订阅消息 : SUB
$ mosquitto_sub -v -t lcd  
# -t 订阅 topic "lcd"
  • 打开第三个终端推送一条消息 : PUB
$ mosquitto_pub -t lcd -m this_is_the_send_msg 
# -t lcd 指定推送的topic
# -m xxx  消息内容, 字符串形式

当我们在执行终端 PUB 那条推送命令后, 可以在订阅终端 SUB 看到对应的消息。

如何开发

  • 我是参考 下载的源代码中的 client 和 example目录下的示例代码。

  • 连接维持
    连接建立后,有个keep alive 在没有发送数据包的情况下,该时间内没有发心跳包会自动断开连接,写0则永远不会断开。

  • 消息发布质量

    • QoS Level 0:“至多一次”
      消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
      这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。

    • QoS Level 1: “至少一次“
      确保消息到达,但消息重复可能会发生。
      这一种方式比较鸡肋,在我的想象中没能想到这种质量的发送在常规的APP开发中有什么用处。

    • QoS Level 2: “只有一次”
      确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
      这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

  • MQTT 发布消息主题

    • MQTT 的主题有特定的语法,使用斜杠(/)作为分隔符,整体呈层次结构,非常类似 URL 中的路径格式。
      比如 厨房中的温度传感器也许会发布到类似“sensors/temperature/home/kitchen” 这样的主题。
    • 通配符
      在 MQTT 中有两个可用的通配符,分别是+和#,+表示匹配单一层级中的任意主题,#表示匹配任意数量的层次。因此在全球温度数据库中可能会有订阅到 sensors/temperature/# 的服务,它能从全世界的任何一个传感器接收温度读数。但如果英国政府想要在自己的温度服务中利用这些数据,只要订阅到 sensors/temperature/uk/# ,就可以限制范围,只接受英国的传感器读数。如果某个服务想要接收某个特定位置所有类型的传感器数据,可以使用类似这样的格式 sensors/+/uk/london/bakerstreet_

MQTT协议及其在物联网中的应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值