什么是Mqtt
mqtt是为物联网场景设计的基于tcp的pub/sub协议,
是基于发布/订阅模式的物联网通信协议
具有简单易用、支持QoS、报文小、轻量、节省带宽、不关心数据具体格式、可以时刻感知设备是否在线等特点
出生背景
本名: Message Queue Telemetry(遥测,远距离测量) Transport
年龄: (1999- )
使命: 九十年代早期为实现 在带宽有限的条件下,让传感器能与IBM的MQ Integrator通信的一个实时数据传输协议
永远的竞争对手webSocket
说到实时数据传输,可能你会想到websocket,那这两究竟有什么区别呢?
其实这两确实十分相似
但有一个最大的不同,你可以认为这两个是处于不同层面的协议
MQTT主要做的是原生设备,基于各种硬件机器设备的通信
WebSocket主要实现的是Web客户端与服务器端的长连接,webSocket是为了H5方便与服务器进行双向通讯而设计的协议,主要用来取代老旧的Comet、长轮询、Server Push等老旧方案的实现
‘’MQTT的接收广播的消息是通过MQTT client,而不是Web Client。由于在物联网应用场景中很多应用是没有Web Client的(比如你家微波炉上面不会安个浏览器。。),所以MQTT特别适合IoT应用场景。‘’
————引用自知乎
实现实例
在项目中安装mqtt库
yarn add mqtt
新建文件mqtt.js
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://xxx.xxx.x.xx:xxxx', {
username: “xxxxx”,//要监听的设备token
});
client.on('connect', function () {
console.log('connected’);//当运行node mqtt.js时,打印connect,并开始订阅
client.subscribe('v1/devices/me/rpc/request/+')
});
client.on('message', function (topic, message) {
//当订阅的设备发生变化时,mqtt就发布设备更改的信息相关内容,request.body等
console.log('request.topic: ' + topic);
console.log('request.body: ' + message.toString());
var requestId = topic.slice('v1/devices/me/rpc/request/'.length);
client.publish('v1/devices/me/rpc/response/' + requestId, message);
});
启动mqtt
node mqtt.js
此时已经进入订阅状态了,我们尝试通过表单更新一下设备的信息
这时可以从控制台中看到,设备所修改的内容已经被mqtt监听并发布出来了
参考文档
https://www.zhihu.com/question/21816631
https://www.emqx.cn/blog/connect-to-mqtt-broker-with-websocket
https://www.emqx.cn/blog/what-is-the-mqtt-protocol