为什么 Mosquitto 代理和 Paho 客户端在连接时运行 CPU 100%?

物联网 MQTT 蚊子 帕霍 网络套接字
2021-05-29 15:43:38

我想通过 Websockets 使用 mosquitto MQTT 代理。我在 Debian 8 服务器上运行 mosquitto 1.6.2 版。“正常” MQTT 工作正常,但我在尝试使用 websocket 连接时遇到问题。

我正在使用 paho javascript 客户端 https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws311.jshttps://cdnjs.cloudflare.com/ajax/libs/paho-mqtt /1.0.1/mqttws31.js

同样的问题使用

https://unpkg.com/mqtt@3.0.0/dist/mqtt.min.js

遵循史蒂夫互联网指南教程。

问题是客户端连接到代理,但似乎一直在运行“onConnect”功能。在这个函数中,可以订阅一个主题并发送一条消息,这是可行的,但是很多,比如每秒 1000 次。这就是问题。但是作为服务器运行客户端的计算机开始运行 100% CPU。

在 mosquitto 代理日志中,我看到客户端只连接一次。我仍然可以从其他客户端 (mosquitto_pub) 发布同一主题,您可以看到从 Paho 客户端发送的数千条消息之间的消息。

有人知道我能做什么吗?

这是javascript客户端代码的一部分:

  function onFailure(message) {
        console.log("Connection Attempt to Host "+host+" Failed");
        console.log(message);
        setTimeout(MQTTconnect, reconnectTimeout);
    }
    function onMessageArrived(msg){
        out_msg="Message received "+msg.payloadString+"<br>";
        out_msg=out_msg+"Message received Topic "+msg.destinationName;
        console.log(out_msg);

    }

    function onConnect() {
  // Once a connection has been made, make a subscription and send a message.

    console.log("Connected ");
    mqtt.subscribe("sensor1");
    message = new Paho.MQTT.Message("Hello World");
    message.destinationName = "sensor1";
    mqtt.send(message);
  }

  function onConnectionLost(responseObject) {
      if (responseObject.errorCode !== 0) {
        console.log("onConnectionLost:"+responseObject.errorMessage);
      }
    }

  function MQTTconnect() {
    console.log("connecting to "+ host +" "+ port);
    mqtt = new Paho.MQTT.Client(host,port,"clientjs-hoi");
    //document.write("connecting to "+ host);
    var options = {
        timeout: 30,
        onSuccess: onConnect,
        onFailure: onFailure,
         };
    mqtt.onMessageArrived = onMessageArrived;
    mqtt.onConnectionLost = onConnectionLost;

    mqtt.connect(options); //connect
    }

控制台中发生的事情的示例:

在此处输入图片说明

在服务器上:

在此处输入图片说明

在日志中只看到一次:

1560802249:从 xxxx 作为 clientId-Tdbml6TORG (p1, c1, k60) 连接的新客户端。

0个回答
没有发现任何回复~