MQTT.js - 如何处理连接错误?

时间:2018-03-21 17:59:11

标签: javascript angular typescript websocket mqtt

我在使用MQTT.js检测连接错误时遇到了困难。

我正在尝试在Angular服务中使用它,并且在服务器运行时连接和与服务器通信似乎工作正常,但client.on('error', ...)永远不会触发。

我设法在连接时通过将错误回调附加到client.stream来检测错误,但是stream似乎是私有属性,因为它没有在官方TypeScript定义中公开,所以不确定如果这真的是正确的方法。

但是,当连接丢失时,我仍然无法工作的是错误,没有任何错误处理程序触发。而是浏览器控制台记录未处理的websocket错误。

示例代码:

import { Injectable } from '@angular/core';
import { connect, MqttClient } from 'mqtt';
import * as msgpack5 from 'msgpack5';
import { environment } from '../../environments/environment';

@Injectable()
export class MqttService {

  private client: MqttClient;
  private msgpack: msgpack5.MessagePack;

  constructor() {
    this.msgpack = msgpack5();

    this.client = connect(`ws://${environment.host}:8001/mqtt`);

    this.client.on('connect', () => {
      console.log('connected');
      this.client.subscribe('foo');
    });

    this.client['stream'].on('error', (error) => {
      // fires when connection can't be established
      // but not when an established connection is lost
      console.log('stream', error);
      this.client.end();
    });

    this.client.on('error', (error) => {
      console.log('client', error); // never fires
    });

    this.client.on('message', (topic, payload) => {
      console.log(topic, this.msgpack.decode(payload));
    });
  }
}

1 个答案:

答案 0 :(得分:0)

我有一个非常相似的问题,log.info(String.format("start http request partner: %s : %s", requestWrapper.getPartnerId(), requestWrapper.getPartner())); 没有在WebSocket连接错误上触发,解决方法是:

client.on('error'..