Django 浏览器中的WebSocket连接错误

Django 浏览器中的WebSocket连接错误,django,mqtt,mosquitto,paho,Django,Mqtt,Mosquitto,Paho,我的机器上运行了mosquitto MQTT代理。我想从浏览器运行MQTT客户机。这就是我在Django应用程序中所做的: <html> <head> <title>Mosquitto Websockets</title> {% load staticfiles %} <meta name="viewport" content="width=device-width, initial-scale=1.0">

我的机器上运行了mosquitto MQTT代理。我想从浏览器运行MQTT客户机。这就是我在Django应用程序中所做的:

<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 = 'test.mosquitto.org';
        port = 8080;
        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>

莫斯奎托网袋
{%load staticfiles%}
var-mqtt;
var重新连接超时=2000;
函数MQTTconnect(){
host='test.mosquitto.org';
端口=8080;
useTLS=false;
这是真的;
用户名=null;
密码=null;
mqtt=new Paho.mqtt.Client(主机、端口、,
“myclientid_u2;”+parseInt(Math.random()*100,10));
/*mqtt=新消息传递.Client(
主办
港口,
“web_uu3;”+parseInt(Math.random()*100,
10));
*/
变量选项={
超时时间:3,
usesls:useTLS,
净化:净化,
onSuccess:onConnect,
onFailure:功能(消息){
$('#status').val(“连接失败:“+message.errorMessage+“重试”);
setTimeout(MQTTconnect,重新连接超时);
}
};
mqtt.onConnectionLost=onConnectionLost;
mqtt.onMessageArrived=onMessageArrived;
如果(用户名!=null){
options.userName=用户名;
options.password=密码;
}
console.log(“Host=“+Host+”,port=“+port+”TLS=“+useTLS+”username=“+username+”password=“+password”);
连接(选项);
}
函数onConnect(){
$(“#status”).val('连接到“+主机+”:“+端口);
//连接成功;订阅我们的主题
subscribe(主题,{qos:0});
$('主题').val(主题);
}
功能onConnectionLost(响应){
setTimeout(MQTTconnect,重新连接超时);
$('#status').val(“连接丢失:+responseObject.errorMessage+”。重新连接”);
};
函数onMessageArrived(消息){
var topic=message.destinationName;
var payload=message.payloadString;
$('#ws')。前置('
  • '+topic+'='+payload+'
  • '); }; $(文档).ready(函数(){ MQTTconnect(); }); 莫斯奎托网袋 订阅 地位:

      它成功地连接到test.mosquitcho.org:8080。我订阅了#,但无法检索已发布的邮件。我认为onMessageArrived(消息)的函数不起作用。控制台中没有错误,因此无法识别任何错误。有什么帮助吗?

      您使用的是哪个版本的MOSQUITO?假设顶部的config.js包含一个名为topic的全局变量,该变量的值为“#”(用于填充subscribe调用),则该变量工作正常。我使用的是来自paho的jquery的CDN副本和完整的mqttws31.js。@hardillb Yes主题变量在那里。我使用的是Mosquito版本1.4和paho javascript客户端版本1.0.1。我能够成功连接、订阅和发布。你查过莫斯奎托日志了吗?@Younes查莫斯奎托日志有什么用?我连接到一个在线经纪人?另外,你的javascript和我的类似,还是你做了一些不同的事情?