gpt4 book ai didi

javascript - MQTT 连接在 Node 中工作,但不能作为 ReactJS 组件

转载 作者:行者123 更新时间:2023-12-02 21:28:47 25 4
gpt4 key购买 nike

当我在nodeJS中运行它时,我有这个mqtt连接,它工作正常......但是当我将它移动到react组件中时,我收到此错误:

WebSocket 握手期间出错:net::ERR_CONNECTION_RESET

我读到这是由于与这里的默认端口有关...... Usage of MQTT protocol in React但我找不到足够理解的答案来解决它。

有人可以帮忙吗?干杯

import React, { Component } from "react";
import mqtt from "mqtt";

let topic = "vendingmachine2/command";
const options = {
port: 16987,
host: "mqtt://address.cloudmqtt.com",
clientId: "***",
username: "***",
password: "***",
keepalive: 60,
reconnectPeriod: 1000,
protocolId: "MQIsdp",
protocolVersion: 3,
clean: true,
encoding: "utf8",
timeout: 3,
useSSL: true
};
function CheckoutForm() {
const MQTTConnect = () => {
const client = mqtt.connect("mqtt://address.cloudmqtt.com", options);
client.on("connect", function() {
// When connected
console.log("connected");
client.subscribe("vendingmachine2/feedback", error => {
if (error) console.error(error);
else {
client.publish(topic, "0");
}
});
openDoor();
});
client.on("message", (topic, message) => {
console.log(topic, message.toString());
});
function openDoor() {
let door = [1, 2];
for (let i = 0; i < door.length; i++) {
client.publish(topic, `${door[i]}`);
}
}
};
return (
<div>

<button onClick={MQTTConnect}>asdasd</button>

</div>
);
}
export default CheckoutForm;

最佳答案

您正在尝试使用代理 URL 的 mqtt:// 架构强制建立 native MQTT 连接。

问题是,当 ReactJS 代码在浏览器中运行时,它无法使用 native MQTT(因为浏览器沙箱),您需要通过 Websockets 使用 MQTT。

您可以通过将 URL 架构更改为 wss://(基于安全 Websockets 的 MQTT)并更改端口号来完成此操作。 Cloudmqtt docs假设端口为 36987 而不是 16987

您应该能够通过 NodeJS 和 ReactJS 中的 Websockets 使用 MQTT。

关于javascript - MQTT 连接在 Node 中工作,但不能作为 ReactJS 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60675028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com