Mosquitto 和简单的 Paho JS 客户端

Posted

技术标签:

【中文标题】Mosquitto 和简单的 Paho JS 客户端【英文标题】:Mosquitto and simple Paho JS Client 【发布时间】:2021-11-26 18:13:02 【问题描述】:

我正在尝试设置一个简单的 mqtt 代理并从网页访问它。我的运气几乎是 0。

我已经下载并运行了 mosquitto 2.0.14。这是我的配置文件:

listener 1883
listener 9001
protocol websockets

当我运行mosquitto -c mosquitto_conf -v时,这会生成以下日志

1637948154: mosquitto version 2.0.14 starting
1637948154: Config loaded from mosquitto.conf.
1637948154: Opening ipv6 listen socket on port 1883.
1637948154: Opening ipv4 listen socket on port 1883.
1637948154: Opening websockets listen socket on port 9001.
1637948154: mosquitto version 2.0.14 running

这是我的 html 文件,我只是在浏览器中打开它。它使用Paho的js客户端。:

<html>
<head>

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
<script type="text/javascript" language="javascript">
    var mqtt;
    var reconnectTimeout = 2000;
    var host = "192.168.1.94";
    var port = 9001;

    function onConnect() 
        console.log("Connected");
        message = new Paho.MQTT.Message("hello");
        message.destinationName = "sensor1";
        mqtt.send(message);
    

    function mqttConnect() 
        console.log("Connecting to " + host + ":" + port);
        mqtt = new Paho.MQTT.Client(host, port, "clientjs");
        var options = 
            timeout: 3,
            onSuccess: onConnect,
        ;

        mqtt.connect(options);
    
</script>

</head>

<body>
    <script>
        mqttConnect();
    </script>
</body>
</html>

我正在使用来自该网站的指南:http://www.steves-internet-guide.com/using-javascript-mqtt-client-websockets/

它在浏览器中出现以下控制台错误:

WebSocket connection to 'ws://127.0.0.1:9001/mqtt' failed

我一直很难找到有效的更新教程。我的最终目标是创建一个 react 应用程序,通过 websockets 连接到 mqtt 代理并接收消息以更新 redux 中的状态。

问题: 如何让js客户端连接? 如何设置 mosquitto 的主机?我可以使用 myhost.local 之类的差异主机,还是我卡在使用 127.0.0.1 或我在运行 ipconfig 时看到的任何内容(我在 Windows 上)?

【问题讨论】:

当我将主机更改为localhost 时,它可以工作。但是蚊子日志说Sending CONNACK to clientjs (0,5),然后紧接着,Client clientjs closed its connection. 【参考方案1】:

您需要添加allow_anonymous true 以允许用户在不提供用户名/密码的情况下进行连接。

这是 v2.0 中引入的一组更改的一部分,旨在改进 mosquitto 开箱即用的默认安全状态。

【讨论】:

整个解决方案有点复杂,但这是迈向解决方案的一步。下一个完全不使用 Paho,因为它已被放弃。我正在使用 mqtt react hooks 并且能够通过 websockets 进行连接。

以上是关于Mosquitto 和简单的 Paho JS 客户端的主要内容,如果未能解决你的问题,请参考以下文章

Paho javascript 客户端 + mosquitto Websockets + Tls

phpMQtt和paho.mqtt.js通过ssl协议链接moquitto

安装paho-mosquitto报缺少dll文件的错误

搭建mosquitto

python MQTT消息中间件mosquitto 消息获取(从MQTT服务器取消息)

Thingsboard之MQTT设备协议简介