MQTT和Websocket有什么区别?

MQTT和WebSocket关系不大。他们不是一个级别的。

WebSocket?许多网站使用轮询来实现推送技术。轮询是在特定的时间间隔(比如1秒),浏览器向服务器发送HTTP请求,然后服务器向浏览器返回最新的数据。投票的缺点是显而易见的。浏览器需要不断向服务器发送请求。但是HTTP请求的头很长,实际传输的数据可能很小,造成了带宽和服务器资源的浪费。

Comet使用AJAX改进轮询,可以实现双向通信。但是Comet还是需要发送请求,而且在Comet中,长链接被广泛使用,也会消耗大量的服务器带宽和资源。

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

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

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

用例A:1000个客户端每秒接受一条消息,网络吞吐量(2 * 1000)= 2000字节= 16000比特每秒。

用例B:10000个客户端每秒接受一条消息,网络吞吐量(2 * 10000)= 20000字节= 160000比特每秒。

用例C:100000个客户端每秒接收一条消息,网络吞吐量(2 * 100000)= 200000字节= 1,600000比特每秒。

MQTT协议是为大量远程传感器和控制设备之间的通信而设计的,这些设备具有有限的计算能力,并且工作在低带宽和不可靠的网络中。它有以下主要特点:

通信开销非常小(最小消息大小为2字节),传输量小,开销非常小(定长头为2字节),协议交换最小化,减少网络流量。

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

使用发布/订阅消息模式来提供一对多消息发布和分离应用程序。

屏蔽有效载荷内容的消息传输。

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

消息发布有三种服务质量,使消息按需到达目的地,满足不稳定网络的传输要求:

“最多一次”,消息发布完全依赖于底层的TCP/IP网络。可能会出现消息丢失或重复。该级别可用于以下情况。环境传感器数据丢失一次也没关系,因为很快就会有第二次传输。

“至少一次”以确保消息到达,但可能会出现消息重复。

“只有一次”,确保消息到达一次。当重复或丢失的消息将导致计费系统中的错误结果时,可以使用该级别。