MQTT和WebSocket

严格来说,MQTT跟WebSocket关系不大。他们不是在一个层级的。

MQTT和TCP、WebSocket的关系可以用下图一目了然:

参考资料:

http://www.zhihu.com/question/21816631

WebSocket的优势


以前,很多网站使用轮询实现推送技术。轮询是在特定的的时间间隔(比如1秒),由浏览器对服务器发出HTTP
request,然后由服务器返回最新的数据给浏览器。轮询的缺点很明显,浏览器需要不断的向服务器发出请求,然而HTTP请求的header是非常长的,而实际传输的数据可能很小,这就造成了带宽和服务器资源的浪费。

Comet使用了AJAX改进了轮询,可以实现双向通信。但是Comet依然需要发出请求,而且在Comet中,普遍采用了长链接,这也会大量消耗服务器带宽和资源。

于是,WebSocket协议应运而生。 浏览器通过 JavaScript 向服务器发出建立 WebSocket
连接的请求,连接建立以后,客户端和服务器通过 TCP 连接直接交换数据。WebSocket 连接本质上是一个 TCP 连接。

WebSocket在数据传输的稳定性和数据传输量的大小方面,具有很大的性能优势。Websocket.org
比较了轮询和WebSocket的性能优势:

HTTP 轮训每次需要返回871个字节,websocket每次只需要2个字节

Use Case A: 1,000个客户端每秒接受一个message,网络吞吐量 (2*1,000)=2,000 bytes = 16,000
每秒bits

Use Case B: 10,000个客户端每秒接受一个message,网络吞吐量 (2*10,000)=20,000 bytes =
160,000 每秒bits

Use Case C: 100,000个客户端每秒接受一个message,网络吞吐量 (2*100,000)=200,000 bytes =
1,600,000 每秒bits

参考:

http://segmentfault.com/a/1190000000382788

Spring 4.0 中的 WebSocket 架构
http://www.oschina.net/translate/websocket-architecture-in-spring-4-0

MQTT

MQTT 协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

  • 非常小的通信开销(最小的消息大小为 2 字节),小型传输,开销很小(固定长度的头部是 2
    字节),协议交换最小化,以降低网络流量。

  • 支持各种流行编程语言(包括 C,Java,Ruby,Python 等等)且易于使用的客户端;

  • 使用发布 / 订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

  • 对负载内容屏蔽的消息传输。

  • 使用 TCP/IP 提供网络连接。

  • 有三种消息发布服务质量,让消息能按需到达目的地,适应在不稳定工作的网络传输需求 :

    • "至多一次",消息发布完全依赖底层 TCP/IP
      网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

    • "至少一次",确保消息到达,但消息重复可能会发生。

    • "只有一次",确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

  • 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

参考:

MQTT技术:为物联网而生
http://www.leiphone.com/0828-danice-mqtt.html

MQTT 折腾笔记----协议简读
http://www.cnblogs.com/youxilua/archive/2013/04/25/3041528.html

基于 WebSocket 的 MQTT 移动推送方案
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1308_xiangr_mqtt/1308_xiangr_mqtt.html

MQTT和WebSocket,布布扣,bubuko.com

时间: 2024-11-03 10:31:31

MQTT和WebSocket的相关文章

HTTP、MQTT、WebSocket有什么区别

https://blog.csdn.net/linyunping/article/details/81950185 相同点:均为OSI 7层模型(应用层协议) MQTT MQTT协议是为大量计算能力有限,且工作在低带宽.不可靠的网络的远程传感器和控制设备通讯而设计的协议,他主要具有一下主要几项特性: 1,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合: 2,对负载内容屏蔽的消息传输: 3,使用TCP/IP提供网络连接: 4,有三种消息发布服务质量: (1)“最多一次”,消息发布完

TCP/IP, WebSocket 和 MQTT

按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP和MQTT是应用层的协议.在这三者之间, TCP是HTTP和MQTT底层的协议.大家对HTTP很熟悉,这里简要介绍下MQTT.MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器的通信协议. HTTP的不足 HTTP协议经过多年的使用,发现了

MQTT协议笔记之mqtt.io项目Websocket协议支持

前言 MQTT协议专注于网络.资源受限环境,建立之初不曾考虑WEB环境,倒也正常.虽然如此,但不代表它不适合HTML5环境. HTML5 Websocket是建立在TCP基础上的双通道通信,和TCP通信方式很类似,适用于WEB浏览器环境.虽然MQTT基因层面选择了TCP作为通信通道,但我们添加个编解码方式,MQTT Over Websocket也可以的. 这样做的好处,MQTT的使用范畴被扩展到HTML5.桌面端浏览器.移动端WebApp.Hybrid等,多了一些想像空间.这样看来,无论是移动端

WebSocket协议探究(三):MQTT子协议

一 复习和目标 1 复习 Nodejs实现WebSocket服务器 Netty实现WebSocket服务器(附带了源码分析) Js api实现WebSocket客户端 注:Nodejs使用的Socket.io模块实现,Netty本身对WebSocket有一定的支持,所以这两种实现都相对容易理解,大家自己可以使用自己喜欢的语言实现(参考Nodejs版本,即不需要考虑过多的情况). 2 目标 使用WebSocket协议进行发送Mqtt消息 即Mqtt协议作为WebSocket协议的子协议进行通信 注

netty+mqtt

package io.mqtt.server; import io.mqtt.tool.ConfigService;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.Channel;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;imp

MQTT协议笔记之mqtt.io项目TCP协议支持

前言 MQTT定义了物联网传输协议,其标准倾向于原始TCP实现.构建于TCP的上层协议堆栈,诸如HTTP等,在空间上多了一些处理路径,稍微耗费了CPU和内存,虽看似微乎其微,但对很多处理能力不足的嵌入式设备而言,选择原始的TCP却是最好的选择. 但单纯TCP不是所有物件联网的最佳选择,提供构建与TCP基础之上的传统的HTTP通信支持,尤其是浏览器.性能富裕的桌面涉及领域,还是企业最 可信赖.最可控的传输方式之一.支持多种多样的连接通道,让目前所有一切皆可联网,除了原始TCP Socket,还要支

mqtt实现自动监听服务器消息

本示例借助meteor的一个环境跑,和我们平时用的node自己搭的环境或java,php的环境本质一样,在此不多讨论. 首先需求是:多系统对接进行消息实时传递. 安装好mqtt:  npm install mqtt --save 本地服务(可以直接配在java中):这里采用mosca 安装好mosca: npm install mosca --save var mosca=reqire('mosca'); var mqttServer=new mosca.Server({port:8000});

MQTT 3.1.1,值得升级的6个新特性

前言 以前看英文文章或资料,看完之后,摘要或者忘记.这一次选择感兴趣的MQTT 3.1.1介绍文章资料,引文见文末,作为练手:非完全翻译,去除掉一些广告性描述,若侵权,请告知. 在沉寂了四年之后,QTT 3.1.1规范于2014年10月30号正式发布,与此同时MQTT 3.1.1已成为OASIS(结构化信息标准促进组织)开放物联网消息传递协议标准(连接1 连接2),换种说法就是MQTT 3.1.1已升级为国际物联网标准. 正如HTTP为人们通过万维网分享信息铺平了道路一样,MQTT能将几十亿低成

EMQ ---websocket

我们可以使用emq自带的Dashboard插件,进行websocket调试,打开谷歌浏览器输入网址,其中192.168.83.128是emq所在的IP地址: http://192.168.83.128:18083/#/websocket 用户名:admin,密码:public WebSocket URI:ws(s)://192.168.83.128:8083/mqtt TCP URI:tcp://192.168.83.128:1883 一.测试实践 测试环境:使用MQTT 3.1.1版本协议,W