MQTT协议(一) Mosquitto安装和使用

in #mqtt7 years ago

MQTT协议(一) Mosquitto安装和使用

0 前言

MQTT是IBM开发的一个即时通讯协议。MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制。Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。
若初次接触MQTT协议,可先理解以下概念:

  • 【MQTT协议特点】——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。
  • 【MQTT协议角色】——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者,代理器(服务器)和订阅者。
  • 【MQTT协议消息】——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
  • 【MQTT协议主题】——MQTT中的主题可理解为相同类型或相似类型的消息集合。

1 安装和使用注意点

1.1 安装

截止2015年12月,最新版本为mosquitto-1.4.5

下载源代码包

wget http://mosquitto.org/files/source/mosquitto-1.4.5.tar.gz

解压

tar zxfv mosquitto-1.4.5.tar.gz

进入目录

cd mosquitto-1.4.5

编译

make

安装

sudo make install

注:当现有服务器源中的mosquitto版本过低时通过以下指令更新源(但最好还是从官网找最新版本)

● sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa

● sudo apt-get update

1.2 安装注意点

【1】编译找不到openssl/ssl.h

【解决方法】——安装openssl

sudo apt-get install libssl-dev

【2】编译过程找不到ares.h

sudo apt-get install libc-ares-dev

【3】编译过程找不到uuid/uuid.h

sudo apt-get install uuid-dev

【4】使用过程中找不到libmosquitto.so.1
error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

【解决方法】——修改libmosquitto.so位置

创建链接


sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

更新动态链接库

sudo ldconfig

【5】./mosquitto_internal.h:40:20: fatal error: ares.h: No such file or directory

vi config.mk 

修改config.mk文件中的 WITH_SRV:===yes==WITH_SRV:===no==

【6】make: g++:命令未找到
【解决方法】
安装g++编译器

sudo apt-get install g++

2 简单测试

一个完整的MQTT示例包括一个代理器,一个发布者和一个订阅者。测试分为以下几个步骤:

  • 【1】启动服务mosquitto。
  • 【2】订阅者通过mosquitto_sub订阅指定主题的消息。
  • 【3】发布者通过mosquitto_pub发布指定主题的消息。
  • 【4】代理服务器把该主题的消息推送到订阅者。

2.1 监听指定端口看客户端是否能连上

  mosquitto  -p 1994 监听端口

开启成功后会在shell中看到以下内容

mosquitto version 1.4.5 (build date 2017-03-12 18:49:20+0800) starting
Using default config.
Opening ipv4 listen socket on port 1994.
Opening ipv6 listen socket on port 1994.    

当有TCP连接上代理服务器此端口时会显示

New connection from 60.190.32.202 on port 1994.

当有MQTT客户端连接成功时(发送CONNECT包),会显示

New client connected from 60.190.32.202 as lens_5kqkbfDHS1thDzwFxwUrb8PGmb2 (c1, k120, u'gateway').

接着客户端必须和服务端保持心跳连接,不然服务会断

Coin Marketplace

STEEM 0.19
TRX 0.14
JST 0.030
BTC 62625.86
ETH 3333.11
USDT 1.00
SBD 2.47