2015-03-03 2 views
1

У меня есть mokquitto MQTT broker, работающий на моей машине. И я хочу запустить клиент MQTT из браузера. Это то, что я сделал в приложении Django:Ошибка установления соединения WebSocket от браузера

<html> 
    <head> 
    <title>Mosquitto Websockets</title> 
    {% load staticfiles %} 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <script src="{% static 'js/mqttws31-min.js' %}" type="text/javascript"></script> 
    <script src="{% static 'js/jquery.min.js' %}" type="text/javascript"></script> 
    <script src="{% static 'js/config.js' %}" type="text/javasacript"></script> 
    <script type="text/javascript"> 
    var mqtt; 
    var reconnectTimeout = 2000; 

    function MQTTconnect() { 
     host = '127.0.0.1'; 
     port = 1883; 
     useTLS = false; 
     cleansession = true; 
     username = null; 
     password = null; 
     mqtt = new Paho.MQTT.Client(host, port, 
        "myclientid_" + parseInt(Math.random() * 100, 10)); 

     /*mqtt = new Messaging.Client(
         host, 
         port, 
         "web_" + parseInt(Math.random() * 100, 
         10)); 
     */ 
     var options = { 
      timeout: 3, 
      useSSL: useTLS, 
      cleanSession: cleansession, 
      onSuccess: onConnect, 
      onFailure: function (message) { 
       $('#status').val("Connection failed: " + message.errorMessage + "Retrying"); 
       setTimeout(MQTTconnect, reconnectTimeout); 
      } 
     }; 

     mqtt.onConnectionLost = onConnectionLost; 
     mqtt.onMessageArrived = onMessageArrived; 

     if (username != null) { 
      options.userName = username; 
      options.password = password; 
     } 
     console.log("Host="+ host + ", port=" + port + " TLS = " + useTLS + " username=" + username + " password=" + password); 
     mqtt.connect(options); 
    } 

    function onConnect() { 
     $('#status').val('Connected to ' + host + ':' + port); 
     // Connection succeeded; subscribe to our topic 
     mqtt.subscribe(topic, {qos: 0}); 
     $('#topic').val(topic); 
    } 

    function onConnectionLost(response) { 
     setTimeout(MQTTconnect, reconnectTimeout); 
     $('#status').val("connection lost: " + responseObject.errorMessage + ". Reconnecting"); 

    }; 

    function onMessageArrived(message) { 

     var topic = message.destinationName; 
     var payload = message.payloadString; 

     $('#ws').prepend('<li>' + topic + ' = ' + payload + '</li>'); 
    }; 


    $(document).ready(function() { 
     MQTTconnect(); 
    }); 

    </script> 
    </head> 
    <body> 
    <h1>Mosquitto Websockets</h1> 
    <div> 
     <div>Subscribed to <input type='text' id='topic' disabled /> 
     Status: <input type='text' id='status' size="80" disabled /></div> 

     <ul id='ws' style="font-family: 'Courier New', Courier, monospace;"></ul> 
    </div> 
    </body> 
</html> 

Я получаю

WebSocket connection to 'ws://127.0.0.1:1883/mqtt' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET mqttws31-min.js:15 
Host=127.0.0.1, port=1883 TLS = false username=null password=null (index):47 

Я новичок в этом, так я не в состоянии решить эту проблему. Любая помощь?

Редактировать 1: Я настроил конфигурационный файл и теперь он успешно подключается к test.mosquitto.org:8080. Я подписался на #, но не смог получить опубликованное сообщение. Я думаю, функция onMessageArrived(message) не работает. В консоли нет ошибок, поэтому невозможно выявить какие-либо ошибки.

enter image description here

ответ

1

Вот сайт, который запускает «MQTT над WebSockets» сервер, где URL может выступать в качестве клиента, так что вы можете опубликовать, то есть свой собственный браузер выступать в качестве клиента, подписавшись на данную тему

http://test.mosquitto.org/ws.html 

это может позволить вам дразнить друг от друга проблемы соединения ... и вот еще nodejs библиотека, которая реализует подобную функциональность

https://www.npmjs.com/package/mqtt-ws 
+0

Я попытался подключиться к «test.mosquitto.org» и получил эту ошибку: соединение с WebSocket с «ws: //test.mosquitto.org/: 1883/mqtt» не выполнено: ошибка при рукопожатии WebSocket: неожиданный код ответа: 404 – toothie

3

Вы уверены, что вы настроили брокер для приема сетевых соединений на порт 1883? По умолчанию вы ожидаете, что это будет слушать MQTT-соединения, а не веб-узлы.

Попробуйте положить следующее в вашем файле конфигурации:

listener 8080 
protocol websockets 

Как говорит Скотт, вы можете попробовать подключения клиента к test.mosquitto.org:8080, чтобы увидеть, если он работает.

+1

Также вы уверены, что используете версию mosqitto 1.4. – hardillb

+0

Я пробовал подключиться к 'test.mosquitto.org' и получил эту ошибку: соединение с WebSocket с 'ws: //test.mosquitto.org/: 1883/mqtt' failed: Ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 404. – toothie

+0

Кроме того, я создал local.conf в файле /etc/mosquitto/conf.d и разместил в нем более двух настроек и получил соединение WebSocket с 'ws: //127.0.0.1: 1883/mqtt 'не удалось: ошибка во время рукопожатия WebSocket: net :: ERR_CONNECTION_RESET – toothie

Смежные вопросы