next.js 我通过mqtt协议请求,但我自己的浏览器请求wss格式

9nvpjoqh  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(305)

我想让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
rm5edbpk

rm5edbpk1#

您不能在浏览器中使用本机MQTT协议,因为浏览器的JavaScript沙箱不允许您进行任意TCP连接。您只能进行HTTP或WS连接。
在浏览器中运行时,MQTT.js包总是将任何mqtt:// URL转换为ws://
您将需要确保您的代理配置为接受WebScoket连接上的MQTT,并在URL中设置端口号以匹配。

相关问题