MQTT WebSocket 连接失败

MQTT WebSocket Connection Failed

我是编程新手,遇到了障碍。 我正在做一个 DRTLS 项目并且遇到了问题。 每当我 运行 我的代码并在我的 Chrome 浏览器的控制台中查看时,我不断得到 与 'ws://192.168.0.156:1883/' 的 WebSocket 连接失败:”。 有高手帮忙吗?

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="https://cdn.bokeh.org/bokeh/release/bokeh-2.4.0.min.js"
    crossorigin="anonymous"></script>
    <script src="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.0.min.js"
        crossorigin="anonymous"></script>
    <script src="https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.0.min.js"
        crossorigin="anonymous"></script>
    <script src="https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.0.min.js"
        crossorigin="anonymous"></script>
    <script src="https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.0.min.js"
        crossorigin="anonymous"></script>
    <script type="text/javascript">
        Bokeh.set_log_level("info");
    </script>
</head>
<body>
  <div id="map0"></div>
  <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
  <script>
    if(window.screen.width > 600){
        var width = window.screen.width/2 - 40
    }else{
        var width = window.screen.width
    }
    var height = 700;
    var i = 0;
    async function fetch_plot(){
        const response = await fetch('/api-Map-w='+width+'&h='+height);
        var item = await response.json();
        Bokeh.embed.embed_item(item, "map0");
    }
    async function fetch_path(count, startPoint, endPoint){
        document.getElementById("map" + count).remove();
        var elemDiv = document.createElement('div');
        count = count + 1;
        elemDiv.id = "map" + count;
        document.body.appendChild(elemDiv);
        const response = await fetch('/api-Path-s='+startPoint+'&e='+endPoint);
        var newItem = await response.json();
        Bokeh.embed.embed_item(newItem, "map" + i);
    }
    fetch_plot();
    // var options = {
    // mqtt_user: "dwmuser",
    // mqtt_password: "dwmpass",
    //     will: {
    //         mqtt_topic_prefix: 'dwm',
    //     }
    // }
    const client = mqtt.connect("ws://192.168.0.156:1883", { clientId: "ee9ea05d56814fd9992bf1ef34119683", username: "dwmuser", password: "dwmpass" });

    // var client = mqtt.connect('ws://192.168.0.156:1883', options=options);
    // console.log(client);
    
    // function insertpoint(name, x, y) {
    //     var ds = Bokeh.documents[0].get_model_by_name(name)
    //     var len = ds.data.x.push(x)
    //     ds.data.y.push(y)
    //     if(len > 5){
    //         ds.data.x.shift()
    //         ds.data.y.shift()
    //     }
    //     ds.change.emit()
    // }
  </script>
</body>

对于几乎所有 MQTT 代理(包括 mosquitto),您需要为本机 MQTT 和基于 WebSockets 的 MQTT 配置单独的侦听器。

本机 MQTT 的默认端口是 1883,您将无法从浏览器使用 Paho JavaScript MQTT 客户端库连接到此端口。

您需要确保您的代理正确配置了 MQTT over WebSockets 侦听器,然后确保在连接时使用网页中的连接端口。

屏幕截图中的 MQTTfx 正在连接到本机 MQTT。

事实证明,WebSocket 使用与 MQTT 不同的端口。这可以在 mosquitto.conf 文件下检查。对于那些要来此线程寻找 WebSocket 端口号的人,默认情况下是 15675。