Кажется, проблема не в коде, даже установка переменной частоты с 1 у меня сработала, потому что я могу видеть сообщение в консоли без предупреждений, возможно, другая часть кода, такая как getPayload (), создает много слушателей, и это может вызвать предупреждение.
Попробуйте ограничить количество слушателей, которые могут быть созданы с помощью клиентской переменной, и установите простой текст в client.publish('/topic/string', JSON.stringify(getPayload()),
следующим образом:
...
var client = mqtt.connect('mqtts://broker.com:8883', {
ca: [fs.readFileSync('broker.pem')],
rejectUnauthorized: false
})
/** This will avoid the MaxListenerExceededWarning */
client.setMaxListeners(100)
...
...
// Do not use JSON.stringify(getPayLoad())
client.publish('/topic/string', 'JUST_TYPE_THIS', (err) => { ...
...
Это проблема объясняется здесь
Обновление
Фрагмент кода, предотвращающий предупреждение об утечке памяти
var mqtt = require('mqtt')
// Changed URL
var client = mqtt.connect('mqtt://test.mosquitto.org')
// IMPORTANT: Limit listeners
client.setMaxListeners(100)
// Changed ms to 1 ms for this example
//let frequency = process.env.FREQUENCY || 1000
let frequency = 1
client.on('connect', function () {
let count = 0
setInterval(() => {
process.stdout.clearLine()
process.stdout.cursorTo(0)
// Set harcoded key-value but you need to set
// real key-value
client.publish('/topic/string', 'key-value-example', (err) => {
if (err) {
} else {
++count
process.stdout.write('Messages published :' + count)
}
})
}, frequency)
})