结识mqtt

176 阅读2分钟

什么叫mqtt协议

mqtt中文叫做消息队列传输探测,是一种传输协议。在原理上是基于发布-订阅模式实现的。同时也是代替客户端-服务端直接通信的一种架构方式

为什么使用mqtt

1.mqtt的数据包开销较小
2.避免传统的api请求方式,使用定时器一直访问服务端。

mqtd的实现基石 发布订阅模式

mqtt里的发布者(pub)和订阅者(sub)并不会直接通信。二者之间的交流会通过broker代理

image.png

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); //开始连接
          ```