Paho MQTT JS клиент публикует, но не подписывается

У меня есть простая страница, на которой должна быть возможность как опубликовать связанное сообщение, так и подписаться на тему на моем MQTT-сервере.

Я пытался изменить все, что мне кажется относящимся, и я пробовал различные примеры, но ни один из них, похоже, не подписался.

<html>

   <head>
      <title>JavaScript MQTT WebSocket Example</title>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js" type="text/javascript">
     </script>
     <script type = "text/javascript" language = "javascript">
        var mqtt;
        var reconnectTimeout = 2000;
        var host="1.2.3.4"; //change this
        var port=9001;
            var lastMsg;

        function onFailure(message) {
            console.log("Connection Attempt to Host "+host+"Failed");
            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("ApolloTemp/");
        message = new Paho.MQTT.Message("Hello World 2");
        message.destinationName = "ApolloTemp";
        mqtt.send(message);
      }


      function MQTTconnect() {
        console.log("connecting to "+ host +" "+ port);
        mqtt = new Paho.MQTT.Client(host,port,"clientjs");
        document.write("connecting to "+ host);
        var options = {
            timeout: 3,
            onSuccess: onConnect,
            onFailure: onFailure,
            userName : "user1",
            password : "password"
             };
        mqtt.onMessageArrived = onMessageArrived

        mqtt.connect(options); //connect
        }

      </script>
   </head>
     <body>
   <h1>Main Body</h1>
    <script>
    MQTTconnect();

    </script>
 <div id=submsg></div>
   </body>  
</html>

Веб-страница должна отображать сообщение, которое было опубликовано. Однако на веб-странице указано только "подключение к 1.2.3.4"

Журнал Mosquitto показывает следующее при загрузке страницы:

1547164811: New client connected from 2.2.2.2 as clientjs (c1, k60, u'user1').
1547164840: Socket error on client clientjs, disconnecting.

2 ответа

Нет, проблема заключалась в том, что мой оригинальный код не записывал полезную нагрузку на страницу, а только на консоль. Решением является добавление document.write(msg.payloadString); в разделе сообщения прибыл.

Наконец-то я понял.

<html>

   <head>
      <title>JavaScript MQTT WebSocket Example</title>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js" type="text/javascript">
     </script>
     <script type = "text/javascript" language = "javascript">
        var mqtt;
        var reconnectTimeout = 2000;
        var host="1.2.3.4"; //change this
        var port=9001;
        var lastMsg;

        function onFailure(message) {
            console.log("Connection Attempt to Host "+host+"Failed");
            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);
            document.write(msg.payloadString);
        }

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

        console.log("Connected ");
        document.write("connected to "+ host);
        mqtt.subscribe("ApolloTemp");
        message = new Paho.MQTT.Message("Client Connected Sucessfully");
        message.destinationName = "ApolloTemp";
        mqtt.send(message);
      }

      function MQTTconnect() {
        console.log("connecting to "+ host +" "+ port);
        mqtt = new Paho.MQTT.Client(host,port,"clientjs");
        document.write("connecting to "+ host);
        var options = {
            timeout: 3,
            userName : "user1",
            password : "password",
            onSuccess: onConnect,
            onFailure: onFailure,
             };
        mqtt.onMessageArrived = onMessageArrived;
        mqtt.connect(options); //connect
        }

      </script>
   </head>
     <body>
   <h1>Main Body</h1>
    <script>
    MQTTconnect();
    </script>

   </body>  
</html>
Другие вопросы по тегам