Paho MQTT JS клиент публикует, но не подписывается
У меня есть простая страница, на которой должна быть возможность как опубликовать связанное сообщение, так и подписаться на тему на моем 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.
2 ответа
Нет, проблема заключалась в том, что мой оригинальный код не записывал полезную нагрузку на страницу, а только на консоль. Решением является добавление document.write(msg.payloadString); в разделе сообщения прибыл.
Наконец-то я понял.
<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>