什么叫mqtt协议
mqtt中文叫做消息队列传输探测,是一种传输协议。在原理上是基于发布-订阅模式实现的。同时也是代替客户端-服务端直接通信的一种架构方式
为什么使用mqtt
1.mqtt的数据包开销较小
2.避免传统的api请求方式,使用定时器一直访问服务端。
mqtd的实现基石 发布订阅模式
mqtt里的发布者(pub)和订阅者(sub)并不会直接通信。二者之间的交流会通过broker代理
mqttClient
,任何使用 TCP/IP 协议使用 MQTT 设备的都可以称之为 MQTT Client,发布和订阅的功能也可以由同一个 MQTT Client 实现
MQTT broker
broker 负责接收所有的消息,并且确定是哪个client订阅了消息,将消息发送给对应的client。
mqtt clientId
clientId 客户id是确保订阅者的唯一值。这个和和你配合的后端约定。一般我们会用随机数 或者 时间戳,如果你有随机数的话 切记一定要将随机数的范围设置的很大,不然就会发生链接冲突的情况
mqtt topicID
tipicID 代表你订阅的主题,也许一个通道里会传过来很多数据,后端会根据主题去给你返回你想要的数据。
mqtt wss和ws的区别
WS协议和WSS协议两个均是WebSocket,他们就类似 http和https的区别。更严谨一点的说法:WS是非安全的,WSS是安全的。非安全的没有证书,安全的需要SSL证书
有了上面的概念 下面就上代码
准备配置的参数
//RabbitMq 服务器IP地址或域名地址
const host = 'wss:yourAddress:15672/path'; // 这里异一定要和后端确定号是ws还是wss 并且还有port和path
//WebSocket 协议服务端口,如果是走 HTTPS,设置443端口
const port = 15675;
//这就是主题
const topic = 'MIDDOL-TEST';
//唯一id 这里可以用随机数也可以用时间戳
const clientId = "myclientid_" + parseInt(Math.random() * 10000, 10);
//服务连接失败后重新尝试连接的时间间隔
const reconnectTimeout = 10000;
// RabbitMq 用户名密码,确保该用户可以访问mqtt资源权限
const username = '1111';//改成自己的账户名密码
const password = '1111';
获取mqtt实例 传递你要链接的地址和客户id进去
this.myClient = new Paho.MQTT.Client(host, clientId);
拿到实例就拿配置去链接mqtt
timeout: 3, //超时时间
mqttVersion: 4, // 这个用来和后端约定mqtt版本号 一般情况下 不写
onSuccess: onConnect, //链接成功的回调函数
onFailure: onFailure, //连接失败的回调函数
userName: username, // 账号
password: password, // 密码
};
this.myClient.connect(options); //开始连接
```