浏览器中的WebSocket连接建立错误
我的机器上运行了mosquitto MQTT代理。我想从浏览器运行MQTT客户机。这就是我在Django应用程序中所做的:浏览器中的WebSocket连接建立错误,websocket,mqtt,mosquitto,paho,Websocket,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 = '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>
我是新手,因此无法解决此问题。有什么帮助吗
编辑1:
我调整了配置文件,现在它成功地连接到test.mosquitto.org:8080。我订阅了#,但无法检索已发布的邮件。我认为消息驱动(message)的函数不起作用。控制台中没有错误,因此无法识别任何错误
这是一个运行“Websockets上的MQTT”服务器的站点,URL可以充当客户端,这样您就可以发布,然后让您自己的浏览器充当订阅给定主题的客户端
http://test.mosquitto.org/ws.html
它可能会让你挑逗分开连接问题。。。这里还有另一个实现类似功能的nodejs库
https://www.npmjs.com/package/mqtt-ws
这是一个运行“MQTT over Websockets”服务器的站点,其中URL可以充当客户端,这样您就可以发布,然后让您自己的浏览器充当订阅给定主题的客户端
http://test.mosquitto.org/ws.html
它可能会让你挑逗分开连接问题。。。这里还有另一个实现类似功能的nodejs库
https://www.npmjs.com/package/mqtt-ws
您确定已将代理配置为接受端口1883上的WebSocket连接吗?默认情况下,您希望它侦听的是MQTT连接,而不是WebSocket 尝试将以下内容放入配置文件:
listener 8080
protocol websockets
正如Scott所说,您可以尝试将您的客户端连接到test.mosquitto.org:8080,看看它是否有效。您确定已将代理配置为在端口1883上接受WebSocket连接吗?默认情况下,您希望它侦听的是MQTT连接,而不是WebSocket 尝试将以下内容放入配置文件:
listener 8080
protocol websockets
正如Scott所说,您可以尝试将您的客户机连接到test.mosquito.org:8080,看看它是否有效。根据您的评论@toothie
“我尝试连接到'test.mosquitcho.org',但出现以下错误:到'ws://test.mosquitcho.org/:1883/mqtt'的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:404” 您发送的连接字符串的格式似乎不正确。你是怎么建造的 对我来说,使用JSON对象定义来实例库的关注点分离让我省去了一些麻烦:
{
protocol: 'wss',
host: `${process.env.MQTT_ENDPOINT}`,
port: 9001,
username: 'admin',
password: '123'
}
也许有些东西对你有帮助 根据您的评论@toothie
“我尝试连接到'test.mosquitcho.org',但出现以下错误:到'ws://test.mosquitcho.org/:1883/mqtt'的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:404” 您发送的连接字符串的格式似乎不正确。你是怎么建造的 对我来说,使用JSON对象定义来实例库的关注点分离让我省去了一些麻烦:
{
protocol: 'wss',
host: `${process.env.MQTT_ENDPOINT}`,
port: 9001,
username: 'admin',
password: '123'
}
也许有些东西对你有帮助 另外,您是否确定正在运行mosqitto版本1.4I尝试连接到“test.mosquitto.org”并出现以下错误:WebSocket连接到“ws://test.mosquitto.org/:1883/mqtt”失败:WebSocket握手期间出错:意外响应代码:404。另外,我在/etc/mosquitto/conf.d中创建了一个local.conf,并在其中添加了以上2个设置,并获得了到“ws://127.0.0.1:1883/mqtt”的WebSocket连接失败:WebSocket握手期间出错:net::ERR_connection_RESET@hardillb是的,我使用的是1.4MosQuito版本,它不会将同一端口重新用于本机MQTT和websocket连接。默认的1883端口将不允许websocket连接,您应该为test.mosquito.org尝试端口8080。对于本地连接,您需要将侦听器添加到本地配置文件,然后连接到localhost:8080而不是localhost:1883。另外,您是否确定正在运行mosqitto版本1.4I尝试连接到“test.mosquitto.org”,但出现以下错误:WebSocket连接到“ws://test.mosquitto.org/:1883/mqtt”失败:WebSocket期间出错握手:意外响应代码:404。另外,我在/etc/mosquitto/conf.d中创建了一个local.conf,并在其中添加了以上2个设置,并获得了到“ws://127.0.0.1:1883/mqtt”的WebSocket连接失败:WebSocket握手期间出错:net::ERR_connection_RESET@hardillb是的,我使用的是1.4MosQuito版本,它不会将同一端口重新用于本机MQTT和websocket连接。默认的1883端口将不允许websocket连接,您应该为test.mosquito.org尝试端口8080。对于本地连接,您需要将侦听器添加到本地配置文件,然后连接到localhost:8080而不是localhost:1883I尝试连接到“test.mosquitto.org”,但出现以下错误:WebSocket连接到“ws://test.mosquitto.org/:1883/mqtt”失败:WebSocket握手期间出错:意外响应代码:404I尝试连接到“test.mosquitto.org”并获得此错误:到“ws://test.mosquitto.org/:1883/mqtt”的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:404