как я могу контролировать переподключение в библиотеке mqtt node.js

Я использую библиотеку mqtt node.js для подключения к интернет-сервису mqtt.

var name = '/#';
var mqttclient = mqtt.createClient(1883, service.getHost(),{username:"" ,password: service.getKey() });
mqttclient.on('connect', function onConnect(){
   winston.info('MQTT Connected'.green, '/'+service.getPattern()+name);
   mqttclient.subscribe('/'+service.getPattern()+name);
   mqttclient.on('message', handleMessage);
}); 

 mqttclient.on('disconnect', onConnect);
 mqttclient.on('close', onClose);
 mqttclient.on('error', onError);

 function onDisconnect(packet){
        winston.info('MQTT MONITOR disconnect!'+packet);            
 }

 function onClose(packet){
        winston.info('MQTT MONITOR close!'+packet); 
 }

 function onError(err){
        winston.error('MQTT MONITORerror!'+err);        
 }

когда мое интернет-соединение отключается или имя пользователя/пароль для аутентификации неверно, библиотека mqtt будет генерировать событие закрытия, пока mqtt.end(), это событие будет постоянно запускаться.

2013-12-07T18:36:53.835Z - info: MQTT MONITOR close!false
2013-12-07T18:36:54.835Z - info: MQTT MONITOR close!false
2013-12-07T18:36:55.832Z - info: MQTT MONITOR close!false
2013-12-07T18:36:56.833Z - info: MQTT MONITOR close!false
2013-12-07T18:36:57.831Z - info: MQTT MONITOR close!false
2013-12-07T18:36:58.847Z - info: MQTT MONITOR close!false
2013-12-07T18:36:59.842Z - info: MQTT MONITOR close!false
2013-12-07T18:37:00.833Z - info: MQTT MONITOR close!false
2013-12-07T18:37:01.832Z - info: MQTT MONITOR close!false
2013-12-07T18:37:02.847Z - info: MQTT MONITOR close!false

мне кажется, что обратный вызов mqtt close не может сказать мне, какая ошибка происходит, например, ошибка аутентификации или хост не может связаться с ошибкой.

Более того, я предполагаю, что существует стратегия повторного подключения. как я могу контролировать эту стратегию повторного подключения в коде mqtt?


person user824624    schedule 07.12.2013    source источник
comment
Как примечание, темы не обязательно должны начинаться с '/'. На самом деле он добавляет к дереву тем дополнительный уровень, который не нужен. Подписка на '/#' отличается от '#'   -  person hardillb    schedule 25.07.2014


Ответы (1)


Посмотрите в журнал вашего брокера, чтобы увидеть подсказки для такого поведения.

В протоколе MQTT значение keepalive определяет скорость отправки сообщения ping брокеру.

Также используйте разные clientid при подключении разных клиентов к одному и тому же брокеру.

person Teixi    schedule 25.07.2014