物联网消息传输协议——mqtt详解

什么是Mqtt

mqtt是为物联网场景设计的基于tcp的pub/sub协议,
是基于发布/订阅模式的物联网通信协议
具有简单易用、支持QoS、报文小、轻量、节省带宽、不关心数据具体格式、可以时刻感知设备是否在线等特点

出生背景

本名: Message Queue Telemetry(遥测,远距离测量) Transport
年龄: (1999- )
使命: 九十年代早期为实现 在带宽有限的条件下,让传感器能与IBM的MQ Integrator通信的一个实时数据传输协议

永远的竞争对手webSocket

说到实时数据传输,可能你会想到websocket,那这两究竟有什么区别呢?
其实这两确实十分相似
但有一个最大的不同,你可以认为这两个是处于不同层面的协议
物联网消息传输协议——mqtt详解_第1张图片

MQTT主要做的是原生设备,基于各种硬件机器设备的通信
WebSocket主要实现的是Web客户端与服务器端的长连接,webSocket是为了H5方便与服务器进行双向通讯而设计的协议,主要用来取代老旧的Comet、长轮询、Server Push等老旧方案的实现
物联网消息传输协议——mqtt详解_第2张图片

‘’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详解_第3张图片

在这里插入图片描述
这时可以从控制台中看到,设备所修改的内容已经被mqtt监听并发布出来了
物联网消息传输协议——mqtt详解_第4张图片

参考文档

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

你可能感兴趣的:(mqtt,物联网,websocket)