MQTT java
一、MQTT (消息队列遥测传输),协议支持全部平台,把全部联网物品和外部链接起来。用来看成传感器和制动器的通讯协议。git
主要提供订阅/发布两种消息模式,更 简约、轻量、易用。适合于受限环境(带宽低、网络延迟高、网络通讯不稳定)的消息分发。github
MQTT 是基于TCP长链接,首先跟MQTT服务器简历TCP链接,而后发送登录请求,要保持长链接,还要定时发心跳包跟服务器保持链接。web
名字shell |
值服务器 |
流向websocket |
描述网络 |
CONNECTsocket |
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 |
断开链接 |
二、数据包结构
固定头(Fixed header):全部 mqtt数据包中,表示 包类型和数据包的分组类标识
可变头(Variable header):部分mqtt数据包中,数据包类型决定了可变头是否存在及其具体内容
消息体(payload):部分mqtt数据包中,表示客户端收到的具体内容。
三、安装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接受消息。