无法从 React 客户端连接到 "mqtt://test.mosquitto.org"

cannot connect to "mqtt://test.mosquitto.org" from React client

我想将客户端 React 应用程序连接到 mosquitto 测试服务器。涉及的“肉”React代码:

import mqtt from 'mqtt';


    const mqttConnect = ("mqtt://192.168.1.157",{clientId:"mqttjs01"}) => {
        setConnectStatus('Connecting');
        console.log(mqttOptions)
        setClient(mqtt.connect(host, mqttOptions));
    };

网页上的错误是:

ws.js:108 WebSocket connection to 'ws://test.mosquitto.org/' failed: 

所以我看到的一个挑战是网络套接字的坚持。 (ws 协议)。然后另一个挑战是我的最终目标是在 Raspberry Pi(端口 1883,我认为 mqqt:// 正在寻址)上与 mosquitto 经纪人 运行 交谈。 Raspberry Pi 没有使用 websockets。

在我看来,我显然是一无所知。任何指导/指向正确方向的任何指导......非常感谢。谢谢。

对于 React,您必须使用 WebSockets(因为它有效地在浏览器中运行)所以您的 URL 应该以 ws:// 开头,而不是 mqtt://

其次,您需要指定一个端口,因为 MQTT over Websockets 没有默认端口(WebSockets 库将默认为端口 80)

所以在 test.mosquitto.org 上检查了 table 端口号后,您应该使用:

ws://test.mosquitto.org:8080/

p.s 您的客户端 ID 可能还需要更多的熵(随机),否则您将永远只有 1 个连接的客户端。

至于您的本地设置,您需要配置 mosquitto 以侦听 2 个不同的端口:

  • 一个用于普通 MQTT(默认 1883)
  • 一个用于 WebSockets 上的 MQTT(您想要的任何端口)

例如类似这样的 conf 文件:

allow_anonymous true

listener 1883

listener 9001
protocol websockets

Mosquitto 将在两个听众之间分享相同的主题space。