我想让mqtt请求与我自己的经纪人互动。它应该使用react或next.js和mqtt.js包来完成(客户端)。
我是尝试,但当我检查浏览器,它似乎我的浏览器尝试WS连接,它currupt:
我正在安装此软件包:
npm i mqtt --save
以下是我尝试使用这些的所有东西:
import React, { useEffect, useState } from "react";
import mqtt from "mqtt";
function Send() {
const [status, setStatus] = useState("Not Connect");
useEffect(() => {
//const client = mqtt.connect("wss://test.mosquitto.org:8081/mqtt");
const client = mqtt.connect("mqtt://171.22.25.40:1883");
client.on("connect", () => {
setStatus("Connect");
client.subscribe("IHS", (err) => {
if (!err) {
client.publish("IHS", "Test Message");
}
});
});
}, []);
return (
<div>
<p>{`Status: ${status}`}</p>
</div>
);
}
export default Send;
我是否遗漏了mqtt功能的特定配置?如何修复?
编辑:
我向mqtt变量附加了一个配置,如下所示:
const options = {
port: 1883,
host: "171.22.25.40",
protocol: "mqtt",
keepalive: 10,
protocolId: "MQTT",
reconnectPeriod: 2000,
};
const client = mqtt.connect("mqtt://171.22.25.40:1883", options);
但什么也没发生。
**已编辑:**我在mosquito配置文件中使用此配置,从C#可以连接到mqtt,但无法连接到wss
port 1883
listener 9001
protocol websockets
allow_anonymous true
1条答案
按热度按时间rm5edbpk1#
您不能在浏览器中使用本机MQTT协议,因为浏览器的JavaScript沙箱不允许您进行任意TCP连接。您只能进行HTTP或WS连接。
在浏览器中运行时,MQTT.js包总是将任何
mqtt://
URL转换为ws://
。您将需要确保您的代理配置为接受WebScoket连接上的MQTT,并在URL中设置端口号以匹配。