【问题标题】:Paho MQTT JS client publishes, but wont subscribePaho MQTT JS 客户端发布,但不会订阅
【发布时间】:2019-01-11 00:19:07
【问题描述】:

我有一个简单的页面,应该既可以发布连接的消息,也可以订阅我的 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.

【问题讨论】:

    标签: javascript mqtt paho


    【解决方案1】:

    我终于明白了。

    <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>
    

    【讨论】:

    • 澄清一下,问题出在您订阅的主题后面的/
    【解决方案2】:

    不,问题是我的原始代码没有将有效负载写入页面,而只是写入控制台。解决方案是添加 document.write(msg.payloadString);到消息到达部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      相关资源
      最近更新 更多