MQTT JavaScript 客户端库

MQTT.jsMQTT JavaScript Client Library - 图1 (opens new window) 是 JavaScript 编写的,实现了 MQTT 协议客户端功能的模块,可以在浏览器 和 Node.js 环境中使用。

由于 JavaScript 单线程特性,MQTT.js 是全异步 MQTT 客户端,MQTT.js 支持 MQTT 与 MQTT over WebSocket,在不同运行环境支持的度如下:

  • 浏览器环境:MQTT over WebSocket(包括微信小程序、支付宝小程序等定制浏览器环境)
  • Node.js 环境:MQTT、MQTT over WebSocket

不同环境里除了少部分连接参数不同,其他 API 均是相同的。

使用 npm 安装:

  1. npm i mqtt

使用 CDN 安装(浏览器):

  1. <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
  2. <script>
  3. // 将在全局初始化一个 mqtt 变量
  4. console.log(mqtt)
  5. </script>

在安装 Node.js 的环境里,可以通过 npm i mqtt -g 命令全局安装以命令行的形式使用 MQTT.js。

  1. npm i mqtt -g
  2. mqtt help
  3. > MQTT.js command line interface, available commands are:
  4. * publish publish a message to the broker
  5. * subscribe subscribe for updates from the broker
  6. * version the current MQTT.js version
  7. * help help about commands
  8. > Launch 'mqtt help [command]' to know more about the commands.

MQTT.js 使用示例

本示例包含 JavaScrip 语言的 MQTT.js 连接 EMQX Broker,并进行消息收发完整代码:

  1. // const mqtt = require('mqtt')
  2. import mqtt from 'mqtt'
  3. // 连接选项
  4. const options = {
  5. clean: true, // true: 清除会话, false: 保留会话
  6. connectTimeout: 4000, // 超时时间
  7. // 认证信息
  8. clientId: 'emqx_test',
  9. username: 'emqx_test',
  10. password: 'emqx_test',
  11. }
  12. // 连接字符串, 通过协议指定使用的连接方式
  13. // ws 未加密 WebSocket 连接
  14. // wss 加密 WebSocket 连接
  15. // mqtt 未加密 TCP 连接
  16. // mqtts 加密 TCP 连接
  17. // wxs 微信小程序连接
  18. // alis 支付宝小程序连接
  19. const connectUrl = 'wss://broker.emqx.io:8084/mqtt'
  20. const client = mqtt.connect(connectUrl, options)
  21. client.on('reconnect', (error) => {
  22. console.log('正在重连:', error)
  23. })
  24. client.on('error', (error) => {
  25. console.log('连接失败:', error)
  26. })
  27. client.on('message', (topic, message) => {
  28. console.log('收到消息:', topic, message.toString())
  29. })

MQTT.js MQTT 5.0 支持

目前 MQTT.js 已经完整支持 MQTT 5.0。