`
rensanning
  • 浏览: 3553158 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38222
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607647
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682831
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89561
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402165
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69769
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91858
社区版块
存档分类
最新评论

MQTT入门(10)- MQTT与WebSocket

阅读更多
基于浏览器的Web应用,一般都是通过JavaScript来和服务器进行交互,这时可以采用基于WebSocket的MQTT。大部分Broker都支持MQTT over WebSocket。这样做的好处在于可以很好的利用浏览器的WebSocket,而服务端无需在开放80/443以外的端口。

MQTT本省和WebSocket没有什么关系,但是Broker可以处理WebSocket里的MQTT包。


设置Mosqiutto Broker
/etc/mosquitto/mosquitto.conf
listener 1883
protocol mqtt

listener 9001
protocol websockets


重启服务器后,Broker就同时支持一下两种访问形式:
引用
tcp://localhost:1883
ws://localhost:9001


测试代码
mosquitto和paho都已经封装好了这部分代码,直接下载下来用即可。

ws.html http://mosquitto.org/js/mosquitto-1.1.js
<!DOCTYPE HTML>
<html>
   <head>
      <script type='text/javascript' src='mosquitto-1.1.js'></script>
      <script type="text/javascript">
         var mosq = null;
         var url = "ws://localhost:9001/";
         var topic = "test/rensanning/ws";
         var time = 0;
         function conn() {
            if ("WebSocket" in window) {
               console.log("WebSocket is supported by your Browser!");
               mosq = new Mosquitto();
               mosq.connect(url);
               mosq.onconnect = function(rc) {
                console.log("CONNACK " + rc);
               };
               mosq.ondisconnect = function(rc) {
                console.log("Lost connection");
               };
               mosq.onmessage = function(topic, payload, qos) {
                console.log("PUBLISH " + topic + " " + payload);
               };
            } else {
               console.log("WebSocket NOT supported by your Browser!");
            }
         }
         function sub() {
             mosq.subscribe(topic, 0);
         }
         function pub() {
             time = time + 1;
             var msg = "ws test by mosquitto-1.1.js. " + time;
             mosq.publish(topic, msg, 0);
         }
      </script>
   </head>
   <body>
      <div>
         <a href="javascript:conn()">connection</a><br/>
         <a href="javascript:sub()">subscribe</a><br/>
         <a href="javascript:pub()">publish</a>
      </div>
   </body>
</html>


ws-paho.html https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js
<!DOCTYPE HTML>
<html>
   <head>
      <script type='text/javascript' src='mqttws31.js'></script>
      <script type="text/javascript">
         var client = null;
         var url = "ws://localhost:9001/";
         var topic = "test/rensanning/ws";
         var time = 0;
         function conn() {
            if ("WebSocket" in window) {
               console.log("WebSocket is supported by your Browser!");
               client = new Paho.MQTT.Client(url, "ClientId");
               client.onConnectionLost = onConnectionLost;
               client.onMessageArrived = onMessageArrived;
               client.connect({onSuccess:onConnect});
            } else {
               console.log("WebSocket NOT supported by your Browser!");
            }
         }
         function sub() {
             client.subscribe(topic);
         }
         function pub() {
             time = time + 1;
             var msg = "ws test by mqttws31.js. " + time;
             var message = new Paho.MQTT.Message(msg);
             message.destinationName = topic;
             client.send(message);
         }
         function onConnect() {
            console.log("CONNACK");
         }
         function onConnectionLost(responseObject) {
            console.log("Lost connection");
            if (responseObject.errorCode !== 0)
              console.log("onConnectionLost:" + responseObject.errorMessage);
         }
         function onMessageArrived(message) {
            console.log("PUBLISH " + message.destinationName + " " + message.payloadString);
         }
      </script>
   </head>
   <body>
      <div>
         <a href="javascript:conn()">connection</a><br/>
         <a href="javascript:sub()">subscribe</a><br/>
         <a href="javascript:pub()">publish</a>
      </div>
   </body>
</html>


挨个执行所有的connection,再挨个执行subscribe,最后挨个publish消息们,可以看到,无论是websocket还是mqtt的消息都可以正确处理。




查看一下websocket的HTTP和Packet:


  • 大小: 19.1 KB
  • 大小: 16.3 KB
  • 大小: 42.4 KB
  • 大小: 15.2 KB
  • 大小: 58.9 KB
  • 大小: 2.5 KB
1
0
分享到:
评论

相关推荐

    Android-MQTT-Websocket-Client:基于 Websockets 的 Android 原生 Java MQTT 框架

    在本文中,我们将深入探讨如何在Android平台上使用基于Websocket的MQTT客户端框架,特别是针对“Android-MQTT-Websocket-Client”项目。这个项目是建立在Paho Java客户端库之上的,允许Android开发者轻松地实现MQTT...

    MQTT-3.1.1-CN(解密版).pdf

    MQTT协议运行在TCP/IP协议之上,也可以在任何提供了有序、可靠、双向连接的网络连接上运行,例如WebSocket。它支持双向通信,允许客户端和服务器互相发送消息。客户端之间或者服务器之间不能直接通信。 MQTT协议...

    vue-mqtt-websocket-example:vue实现的mqtt协议方案,实现物联网设备实时通信和获取信息

    最近公司在一个物联网项目中为了解决页面主动实时获取设备位置信息和一些状态信息,而尝试使用了mqtt协议的方案,实现类似html5 webSocket协议实时通讯的替代方案。项目运行npm installnpm run dev注意:页面运行...

    web mqtt-websocket.zip

    在Web MQTT应用中,WebSocket作为MQTT协议的传输层,通过建立WebSocket连接,Web客户端可以像原生MQTT客户端一样与mosquitto服务器交互,发布和订阅主题,实现物联网设备与Web应用的实时数据交换。 4. **web mqtt-...

    mqtt-client-Vue.js.zip

    4. **WebSocket与MQTT库**:在Vue.js中,可能使用了如Paho MQTT JavaScript库来实现WebSocket与MQTT服务器的连接。 5. **组件化开发**:理解Vue.js中的组件是如何创建、复用和组合的,以及如何在微信小程序中使用...

    MQTT-3.1.1-CN.zip

    MQTT协议支持使用WebSocket作为网络传输层,这使得它能够与Web技术更好地集成。WebSocket是一种在单个TCP连接上进行全双工通信的协议,提供了低延迟、高效的双向通信,特别适用于需要实时交互的应用场景。通过...

    mqtt-websocket-client:使用MQTT协议的Websocket客户端

    MQTT Websocket客户端 使用MQTT协议和Node JS的Websocket客户端。 该项目是实习的任务。 该应用程序托管在Heroku上,可以在找到实时版本。先决条件: 节点JS NPM Chrome(能够运行测试)用法: # installing ...

    mqttws31.js文件和MQTT.js-master

    `mqttws31.js` 文件可能是MQTT.js库的一个特定版本,专注于WebSocket支持,因为MQTT在Web上通常通过WebSocket协议来实现跨域通信。 MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅(Publish-...

    mqtt-websocket

    **MQTT与WebSocket结合应用详解** MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,主要用于物联网(IoT)环境中的设备通信。它设计的目标是低带宽、低功耗和高可靠性,使得在有限的...

    mica mqtt 是一个基于 t-io 实现的低延迟、高性能的 mqtt 物联网组件 .rar

    mica mqtt mica-mqtt 基于 t-io 实现的简单、低延迟、高性能 的 mqtt 物联网开源组件。使用详见 mica-mqtt gitee 源码 mica-mqtt-...添加 websocket 支持(已预研成功)。 优化处理 mqtt session,以及支持 v5.0

    andorid mqtt websocket app

    "andorid mqtt websocket app"的主题聚焦于使用MQTT(Message Queuing Telemetry Transport)协议和WebSocket技术来实现这一目标。这两种技术都是用于设备间高效、低延迟的数据交换方式,特别适合于物联网(IoT)场景...

    Activemq-MQTT-Websocket库Js文件mqttws31.js

    **MQTT与Websocket简介** MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,最初设计用于远程位置的低带宽、高延迟或不可靠网络通信。它非常适合物联网(IoT)设备,因为它的设计目标...

    MQTT-3.1.1-CN.pdf

    该协议于2014年10月29日发布3.1.1版本,由结构化信息标准促进组织OASIS维护,并且在文档中提供了详细的MQTT协议中文版规范。 MQTT协议的主要特点包括: 1. 发布/订阅模式:这是一种消息分发机制,客户端可以订阅一...

    使用Sec-Websocket-Protocol

    标题中的“使用Sec-Websocket-Protocol”是指在WebSocket通信中使用`Sec-WebSocket-Protocol`头部字段,这个字段允许服务器和客户端协商一个特定的应用层协议。WebSocket API为浏览器和服务器提供了一种全双工、低...

    开源 MQTT 服务器(基于reactor-netty实现高性能的、可扩展、支持千万级设备接入集群)

    开源 MQTT 服务器(基于reactor-netty实现高性能的、可扩展、支持千万级设备接入集群)支持 mqtt 3.1.1、mqtt 5 SMQTT基于reactor-netty(spring-webflux底层依赖) 开发,底层采用Reactor3反应堆模型,支持单机部署,...

    mqtt-mosquitto-ws

    mqtt支持ws的mosquitto工具和node测试Demo;该压缩包已包含了所有需要的DLL,上一次资源中缺少部分DLL,mosquitto在一些电脑上不能运行。测试方法:mosquitto -c mosquitto.conf -v,正常开启后会显示websocket 已...

    javascript client mqtt websocket

    JavaScript结合MQTT和WebSocket可以创建强大的实时Web应用程序,尤其是在IoT场景中,允许网页直接与设备进行数据交互。WebSocket作为底层通信协议,使JavaScript MQTT客户端能够实现实时、双向的通信,而无需频繁...

    Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持10万并发(有群友实现了130万在线).zip

    Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持10万并发(有群友实现了130万在线).zip 功能说明: 参考MQTT3.1.1规范实现 完整的QoS服务质量等级实现 遗嘱消息, 保留消息及消息分发重试 心跳机制 MQTT连接...

    mqtt websocket

    **MQTT与WebSocket简介** MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,主要用于远程位置、低带宽、高延迟或不可靠网络环境中的设备通信。它设计的核心原则是低开销、低带宽占用...

Global site tag (gtag.js) - Google Analytics