4

我尝试让 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>

我试图在 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

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

mqttws31.js 的第 914 行正在尝试执行此操作。socket = new WebSocket(wsurl, 'mqttv3.1');

所以看起来

  • 任一 websockets 都不适用于 test.mosquitto.org
  • 或者我的例子是错误的!

我现在纠结了很长时间,需要运行一个 JavaScript MQTT 客户端。

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

首先十分感谢!

4

2 回答 2

5

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

client = new Messaging.Client("test.mosquitto.org", 80, "mosqOtti");

在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"
    )
)
于 2013-09-09T09:47:23.023 回答
2

我在让它为我工作时遇到了很多麻烦,我想发布对我来说最快/最简单的 Ubuntu 解决方案。

在 Ubuntu 上安装支持 websocket 的 lighttpd

基本上,请关注这篇博文:http: //oriolrius.cat/blog/tag/mqtt/

脚步:

1) 从这里为您的 ubuntu 版本添加存储库:https ://launchpad.net/~roger.light/+archive/ppa/

对于 Ubuntu 12.04 LTS (Precise),这些行是:

deb http://ppa.launchpad.net/roger.light/ppa/ubuntu precise main
deb-src http://ppa.launchpad.net/roger.light/ppa/ubuntu precise main

2) 安装 lighttpd 和 mod_websocket 插件:

apt-get update
apt-get install lighttpd lighttpd-mod-websocket

3) 在 /etc/lighttpd/lighttpd.conf 包含的某处添加 MQTT websocket 的配置

server.modules = ( "mod_websocket", )

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

...

4) (可选)将 lighttpd 指向非 html 套接字。这有效

server.port = 8080

5) 重启 lighttpd,Javascript 客户端连接到http://hostname:8080. 我使用 Paho Javascript 客户端执行以下命令:https ://www.ibm.com/developerworks/community/blogs/c565c720-fe84-4f63-873f-607d87787327/entry/how_to_prog_javascript?lang=en

service lighttpd restart
于 2014-03-01T01:18:53.013 回答