MQTT
1、MQTT (消息队列遥测传输),协议支持所有平台,把所有联网物品和外部连接起来。用来当作传感器和制动器的通信协议。
主要提供订阅/发布两种消息模式,更 简约、轻量、易用。适合于受限环境(带宽低、网络延迟高、网络通信不稳定)的消息分发。
MQTT 是基于TCP长连接,首先跟MQTT服务器简历TCP连接,然后发送登陆请求,要保持长连接,还要定时发心跳包跟服务器保持连接。
名字 |
值 |
流向 |
描述 |
CONNECT |
1 |
C->S |
客户端请求与服务端建立连接 |
CONNACK |
2 |
S->C |
服务端确认连接建立 |
PUBLISH |
3 |
CóS |
发布消息 |
PUBACK |
4 |
CóS |
收到发布消息确认 |
PUBREC |
5 |
CóS |
发布消息收到 |
PUBREL |
6 |
CóS |
发布消息释放 |
PUBCOMP |
7 |
CóS |
发布消息完成 |
SUBSCRIBE |
8 |
C->S |
订阅请求 |
SUBACK |
9 |
S->C |
订阅确认 |
UNSUBSCRIBE |
10 |
C->S |
取消订阅 |
UNSUBACK |
11 |
S->C |
取消订阅确认 |
PING |
12 |
C->S |
客户端发送PING(连接保活)命令 |
PINGRSP |
13 |
S->C |
PING命令回复 |
DISCONNECT |
14 |
C->S |
断开连接 |
2、数据包结构
固定头(Fixed header):所有 mqtt数据包中,表示 包类型和数据包的分组类标识
可变头(Variable header):部分mqtt数据包中,数据包类型决定了可变头是否存在及其具体内容
消息体(payload):部分mqtt数据包中,表示客户端收到的具体内容。
3、安装mqtt服务器
http://mosquitto.org/files/source/ 下载 最新的mosquitto-*.tar.gz 文件
https://codeload.github.com/warmcat/libwebsockets/zip/master 下载 libwebsockets-master.zip
先解压 libwebsockets 并安装
cmake -- 用途是能通过一系列的源码和相关的配置来生成需要的编译器平台上的项目文件。在这里是自动产生makefile文件用的工具。
make install -- 这里用来安装 libwebsockets
ldconfig 辅助命令, root 权限下 在/lib和/usr/lib 里添加库文件,无需将路径添加到 /etc/ld.so.conf 中,需要使用命令 ldconfig ,否则无法找到库文件。
liblocal.conf 内部信息:
安装 mosquitto
根据需要修改 config.mk , 我的没改动。就用的默认的
make install 安装即可
进入 /etc/mosquitto 下
mosquitto -c mosquitto.conf.example 运行 mosquitto
可以看到 mosquitto 版本 1.5 ,开放端口 1883
可以设定新的用户名密码: (此步骤可以省略,在测试时候不输入用户名密码即可)
mosquitto_passwd -c pwfile.example testone
在 aclfile.example 中修改testone 读写topic 权限
新开一个 shell
mosquitto_pub -h localhost -t subtopic -u testone -P testone -m "1212121"
上传消息 pub:本地localhost topic: subtopic 用户名:testone 密码 :testone 发送消息:1212121
新开一个 shell
mosquitto_sub -h localhost -t subtopic -u testone -P testone
接收消息 sub:本地localhost toptic:subtopic 用户名:testone 密码:testone 接收消息:1212121
附一份Java 的 mqtt测试代码:
https://github.com/wgy1109/mqttDemo
MqttTest.java 中描述了Java向mqtt发送消息,以及从mqtt接受消息。