Django 浏览器中的WebSocket连接错误
我的机器上运行了mosquitto MQTT代理。我想从浏览器运行MQTT客户机。这就是我在Django应用程序中所做的: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">
<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和我的类似,还是你做了一些不同的事情?