无法运行MQTT JavaScript客户端

时间:2013-09-09 08:26:36

标签: 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>

我试图在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似乎也不是正确的解决方案。

非常感谢!

2 个答案:

答案 0 :(得分:4)

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

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

this code处运行了一个websockets示例(基于http://test.mosquitto.org/sys/)。虽然它使用了已弃用的mosquitto javascript客户端,但它应该证明它有效。

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

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

答案 1 :(得分:2)

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

在Ubuntu上安装带有websocket支持的lighttpd

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

步骤:

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

对于Ubuntu 12.04 LTS(精确),行是:

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