Как использовать MQTT в Node.js

Node.js — это среда выполнения JavaScript, построенная на движке Chrome V8 JavaScript. До появления Node.js JavaScript обычно использовался в качестве клиентского языка программирования, а программы, написанные на JavaScript, часто запускались в браузере пользователя. Появление node.js позволяет использовать JavaScript для серверного программирования.

MQTT легкий Обмен сообщениями Интернета вещей протокол, основанный на модели публикации/подписки. Он может предоставлять надежные службы обмена сообщениями в режиме реального времени для сетевых устройств с очень небольшим кодом и пропускной способностью. Он широко используется в таких отраслях, как Интернет вещей, мобильный Интернет, интеллектуальное оборудование, Интернет транспортных средств и силовая энергия.

В этой статье в основном рассказывается, как использовать MQTT в проекте Node.js для реализации функций подключения, подписки, отписки, публикации и получения сообщений между клиентом и сервером. MQTT-брокер.

Клиентская библиотека MQTT

MQTT.js — это клиентская библиотека протокола MQTT, написанная на JavaScript и используемая в Node.js и браузерных средах. В настоящее время наиболее широко используется клиентская библиотека MQTT в экосистеме JavaScript.

Инициализация проекта

Подтвердите версию Node.js

Этот проект использует Node.js v14.14.0 для разработки и тестирования. Читатели могут подтвердить версию Node.js с помощью следующей команды

node --version

v14.14.0

Используйте npm для установки клиентской библиотеки MQTT.js

# create a new project
npm init -y

# Install dependencies
npm install mqtt --save

После установки мы создаем новый файл index.js в текущем каталоге в качестве входного файла проекта, в котором мы можем реализовать полную логику теста соединения MQTT.

Использование Node.js MQTT

Подключиться к MQTT-серверу

В этой статье будет использоваться Бесплатный общедоступный сервер MQTT предоставляется EMQX, который создан на основе EMQ Облако MQTT. Информация о доступе к серверу выглядит следующим образом:

  • Маклер: Broker.emqx.io
  • TCP-порт: 1883 г.
  • SSL/TLS-порт: 8883

Импортируйте клиентскую библиотеку MQTT.js

Примечание. В среде Node.js используйте спецификацию commonjs для импорта модулей зависимостей.

const mqtt = require('mqtt')

Задайте параметры подключения MQTT Broker

Задайте адрес подключения, порт и тему MQTT Broker. Здесь мы используем функцию генерации случайных чисел в JavaScript для генерации идентификатора клиента.

const host="broker.emqx.io"
const port="1883"
const clientId = `mqtt_${Math.random().toString(16).slice(3)}`

Написать функцию подключения MQTT

Мы используем параметры подключения, только что установленные для подключения, а URL-адрес для подключения объединяется через порты хоста и порта, определенные выше. Затем мы вызываем встроенную функцию подключения модуля MQTT, и она вернет экземпляр клиента после успешного подключения.

const connectUrl = `mqtt://${host}:${port}`

const client = mqtt.connect(connectUrl, {
  clientId,
  clean: true,
  connectTimeout: 4000,
  username: 'emqx',
  password: 'public',
  reconnectPeriod: 1000,
})

Мы используем функцию on возвращенного экземпляра Client для отслеживания состояния подключения и подписываемся на тему в функции обратного вызова после успешного подключения. На этом этапе мы вызываем функцию подписки экземпляра Client, чтобы подписаться на тему. /nodejs/mqtt после успешного подключения.

const topic="/nodejs/mqtt"
client.on('connect', () => {
  console.log('Connected')
  client.subscribe([topic], () => {
    console.log(`Subscribe to topic '${topic}'`)
  })
})

После успешной подписки на тему мы используем on функция контроля функции получения сообщения. Когда сообщение получено, мы можем получить тему и сообщение в функции обратного вызова этой функции.

Примечание. Сообщение в функции обратного вызова имеет тип Buffer и должно быть преобразовано в строку с помощью функции toString.

client.on('message', (topic, payload) => {
  console.log('Received Message:', topic, payload.toString())
})

Публикация сообщений

После выполнения вышеуказанной подписки на тему и мониторинга сообщений напишем функцию для публикации сообщений.

Примечание. Сообщение необходимо опубликовать после успешного подключения MQTT, поэтому мы записываем его в функцию обратного вызова после успешного подключения.

client.on('connect', () => {
  client.publish(topic, 'nodejs mqtt test', { qos: 0, retain: false }, (error) => {
    if (error) {
      console.error(error)
    }
  })
})

Полный код

Код для подключения к серверу, подписки на тему, публикации и получения сообщений.

const mqtt = require('mqtt')

const host="broker.emqx.io"
const port="1883"
const clientId = `mqtt_${Math.random().toString(16).slice(3)}`

const connectUrl = `mqtt://${host}:${port}`
const client = mqtt.connect(connectUrl, {
  clientId,
  clean: true,
  connectTimeout: 4000,
  username: 'emqx',
  password: 'public',
  reconnectPeriod: 1000,
})

const topic="/nodejs/mqtt"
client.on('connect', () => {
  console.log('Connected')
  client.subscribe([topic], () => {
    console.log(`Subscribe to topic '${topic}'`)
  })
  client.publish(topic, 'nodejs mqtt test', { qos: 0, retain: false }, (error) => {
    if (error) {
      console.error(error)
    }
  })
})
client.on('message', (topic, payload) => {
  console.log('Received Message:', topic, payload.toString())
})

Полный код проекта см.:

Тест

Мы добавляем строку сценария запуска в поле сценария в файле package.json.

"scripts": {
  "start": "node index.js"
}

Тогда мы можем просто использовать npm start для запуска проекта.

npm start

После запуска мы можем увидеть вывод информации консоли следующим образом:

NodeJS MQTT Старт

Мы видим, что клиент успешно подключился к MQTT-брокер и подписался на тему, успешно получил и опубликовал сообщения. На этом этапе мы будем использовать Клиентский инструмент MQTT 5.0 — MQTT X как еще один клиент для теста публикации и получения сообщений.

Клиентский инструмент MQTT 5.0 — MQTT X

Мы видим, что сообщение, отправленное MQTT X, выводится в консоль.

MQTT-сообщения

До сих пор мы использовали Node.js в качестве MQTT-клиент подключиться к публичный MQTT-брокери реализует соединение, публикацию сообщений и подписку между тестовым клиентом и сервером MQTT.

Первоначально опубликовано на

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *