0

我正在尝试通过 MQTT 将数据传递到某些 HTML5 页面的不同方法。

我已经将Node.jsSocket.IO一起查看,这似乎是一个不错的解决方案,因为 Socket.IO 有一个“房间”概念,可以很容易地转换为 MQTT “主题”

我很好奇pywebsocket是否有任何这样的概念,它允许我对多个页面使用相同的 websockethandler,而无需向所有页面发送相同的数据。

我已经查看了pywebsocket谷歌代码页以及一些示例,但我无法找到任何允许这种行为的信息。如果有人对此有更多信息,我会很高兴:)

4

1 回答 1

3

虽然我无法直接提示您将 Socket.IO 的房间概念转换为 MQTT,但您可能想看看Mosquitto.js,它允许您通过 Websockets 从浏览器轻松建立 MQTT 连接,其行为非常类似于真实网络套接字。使用这种方法,每个打开的页面都会建立到 MQTT 代理的唯一连接。因此,您甚至可以根据客户端的某些条件订阅不同的主题。

一个小示例代码:

  var mqttSocket = new Mosquitto();

  mqttSocket.onconnect = function(rc){
    console.log("Connection established");
  };

  mqttSocket.ondisconnect = function(rc){ 
    console.log("Connection terminated");
  };

  mqttSocket.onmessage = function(topic, payload, qos){
    console.log("Message received " + topic + ":" + payload);
  }

  mqttSocket.connect("ws://yourserver:8080"); 
  mqttSocket.subscribe('some/topic', 0);

由于尚未在任何 MQTT 代理中真正实现对 Websocket 连接的本机支持,因此服务器端需要一些软件将 Websocket 连接桥接到 MQTT 代理。

Mosquitto.js 的开发人员建议为 Lighttpd 网络服务器使用自定义 mod_websocket 模块来完成此任务。但是,作为替代方案,您可能想尝试WSS,它将任何 Websocket 连接转换为任意其他 TCP 端口,并且开销最小

对于上面的示例,您可以将 mqttSocket 连接到 WSS 实例正在侦听传入连接的地址和端口。然后将 WSS 配置为将传入连接转发到您选择的 MQTT 代理。

免责声明:WSS 由我的一个朋友编写,专门用于将 Mosquitto.js 连接连接到 Mosquitto MQTT 代理的实例。

我希望这有帮助。

于 2013-03-28T13:43:42.117 回答