Как использовать 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
После запуска мы можем увидеть вывод информации консоли следующим образом:
Мы видим, что клиент успешно подключился к MQTT-брокер и подписался на тему, успешно получил и опубликовал сообщения. На этом этапе мы будем использовать Клиентский инструмент MQTT 5.0 — MQTT X как еще один клиент для теста публикации и получения сообщений.
Мы видим, что сообщение, отправленное MQTT X, выводится в консоль.
До сих пор мы использовали Node.js в качестве MQTT-клиент подключиться к публичный MQTT-брокери реализует соединение, публикацию сообщений и подписку между тестовым клиентом и сервером MQTT.
Первоначально опубликовано на