为什么我无法连接到 hivemq 代理,套接字在我尝试重新连接时继续关闭?

Why cannot I connect to hivemq broker the socket keep on getting closed when I try to reconnect?

我已经写了一个 rfid 值并在内部订阅时 javascript,套接字连接丢失,我附上了我的控制台的屏幕截图。

value.php

<body>

      <div id="print"></div>

      <!--  jquery library -->
      <script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>

      <!--  paho MQTT library -->
      <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>

      <script src="app.js"></script>
</body>

我正在尝试使用 hivemq 代理进行连接并使用端口号 8000,但未连接。

app.js

var hostname = "broker.hivemq.com";
var clientId = "someid";
var username = "username";
var password = "password";
var subscription = "sometopicname";

mqttClient = new Paho.MQTT.Client(hostname, 8000, clientId);

mqttClient.onMessageArrived = MessageArrived;
mqttClient.onConnectionLost = ConnectionLost;
Connect();

function Connect() {
    mqttClient.connect({
        onSuccess: Connected,
        onFailure: ConnectionFailed,
        userName: username,
        password: password,
        useSSL: false
    });
}

function Connected() {
    console.log("Connected");
    mqttClient.subscribe(subscription);
}

function ConnectionFailed(res) {
    console.log("Connection failed: " + res.errorMessage);
}

function ConnectionLost(res) {
    if (res.errorCode !== 0) {
        console.log("Connection lost:" + res.errorMessage);
        Connect();
    }
}

function MessageArrived(message) {
        console.log(message.payloadString);
}

首先,您是否 100% 确定端口 8000 已配置为支持 Websockets 上的 MQTT。

其次,您似乎有一个硬编码的 clientId 值,这样您一次只能连接 1 个客户端。每个页面都需要有一个唯一的 clientId,如果您尝试连接 2 个具有相同 clientId 的客户端(在任何浏览器中该页面的 2 个或更多实例)会将另一个从代理中踢出。 ClientIds 必须是全局唯一的。

如果在检查了第一个并修复了第二个之后,您应该检查代理日志以查看它可能关闭连接的原因。