无法运行MQTT JavaScript客户端

mar*_*ine 4 javascript mqtt

我尝试使MQTT JavaScript客户端运行。它基于Eclipse Paho客户端库(org.eclipse.paho.mqtt.javascript.git)。

在运行JavaScript客户端之前,我使用

  • mosquitto_pub -h test.mosquitto.org -t“ / topic1” -m“ test”

  • mosquitto_sub -h test.mosquitto.org -t“ / topic1” -v

工作正常。

然后,我调用了自己的mqttTest.html,其中包含:

<!DOCTYPE html>
<head>

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  <script type="text/JavaScript" src="mqttws31.js"></script>
  <script type="text/JavaScript">

  var client;

  function doConnect() {

    client = new Messaging.Client("test.mosquitto.org", 1883, "mosqOtti");
    console.log("Client instantiated.");
    client.startTrace();
    console.log("Now trying to connect...");
    client.connect({onSuccess:onConnect});

  }

  function onConnect() {

    console.log("connection established");
    doSubscribe();

  }

  function doSubscribe() {

      client.subscribe("/topic1");

  }

  window.onload = function() {

      this.doConnect();

  }

</script>
</head> 

.
.
.

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我试图在Firefox中放慢脚步。调试控制台输出告诉我

[09:58:27.825] Firefox can't establish a connection to the server at ws://test.mosquitto.org:1883/mqtt. @ file:///mqttws31.js:914
Run Code Online (Sandbox Code Playgroud)

我知道moquitto本身不支持websocket。但我认为在test.mosquitto.org上运行的lighttp安装了mod_websockets。

mqttws31.js的第914行正在尝试执行此操作。

所以看来

  • 两种websocket都不适用于test.mosquitto.org
  • 或我的例子是越野车!

我已经苦苦挣扎了很长时间,需要运行一个JavaScript MQTT Client。

有人有主意吗?还是另一种方法?Socket.IO似乎也不是正确的解决方案。

首先十分感谢!

ral*_*ght 5

正如@hardillb所说,您使用的端口不正确。test.mosquitto.org上的1883年仅用于mqtt。如果您想使用websocket,则需要使用端口80进行连接。您应该能够将url更改为ws://test.mosquitto.org:1883/mqtt,这可能意味着将代码更改为

client = new Messaging.Client("test.mosquitto.org", 80, "mosqOtti");
Run Code Online (Sandbox Code Playgroud)

http://test.mosquitto.org/sys/上有一个websockets示例(基于此代码)。尽管它使用了不赞成使用的mosquitto javascript客户端,但它应证明它可以工作。

test.mosquitto.org上的lighttpd配置为:

websocket.server = (
    "/mqtt" =>
    (  
        "host" => "127.0.0.1",
        "port" => "1883",
        "subproto" => "mqttv3.1",
        "type" => "bin"
    )
)
Run Code Online (Sandbox Code Playgroud)