我想通过 Websockets 使用 mosquitto MQTT 代理。我在 Debian 8 服务器上运行 mosquitto 1.6.2 版。“正常” MQTT 工作正常,但我在尝试使用 websocket 连接时遇到问题。
我正在使用 paho javascript 客户端 https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws311.js和 https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt /1.0.1/mqttws31.js
同样的问题使用
https://unpkg.com/mqtt@3.0.0/dist/mqtt.min.js
遵循史蒂夫互联网指南教程。
问题是客户端连接到代理,但似乎一直在运行“onConnect”功能。在这个函数中,可以订阅一个主题并发送一条消息,这是可行的,但是很多,比如每秒 1000 次。这就是问题。但是作为服务器运行客户端的计算机开始运行 100% CPU。
在 mosquitto 代理日志中,我看到客户端只连接一次。我仍然可以从其他客户端 (mosquitto_pub) 发布同一主题,您可以看到从 Paho 客户端发送的数千条消息之间的消息。
有人知道我能做什么吗?
这是javascript客户端代码的一部分:
function onFailure(message) {
console.log("Connection Attempt to Host "+host+" Failed");
console.log(message);
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("sensor1");
message = new Paho.MQTT.Message("Hello World");
message.destinationName = "sensor1";
mqtt.send(message);
}
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
}
}
function MQTTconnect() {
console.log("connecting to "+ host +" "+ port);
mqtt = new Paho.MQTT.Client(host,port,"clientjs-hoi");
//document.write("connecting to "+ host);
var options = {
timeout: 30,
onSuccess: onConnect,
onFailure: onFailure,
};
mqtt.onMessageArrived = onMessageArrived;
mqtt.onConnectionLost = onConnectionLost;
mqtt.connect(options); //connect
}
控制台中发生的事情的示例:
在服务器上:
在日志中只看到一次:
1560802249:从 xxxx 作为 clientId-Tdbml6TORG (p1, c1, k60) 连接的新客户端。

