为什么选择网络套接字
Websockets已经存在很长时间了。有许多竞争的websocket实现,几乎每个浏览器都有其自己的实现特定特性。如今,大多数相关的浏览器都支持websocket。与使用(长)轮询时所需的经典HTTP请求相比,Websocket在带宽和延迟方面的开销很小。这种开销尽可能少的理念非常适合MQTT。
通过Websockets上的MQTT,每个浏览器都可以成为MQTT设备。由于MQTT的发布/订阅模式,只要您订阅了正确的主题,就会在事件发生时(实际上是世界上的任何地方)实时推送到浏览器。使用MQTT,您可以在标准的websocket推送之上获得以下功能:
- 服务语义的质量:当使用QoS的1 / 2,你的客户或经纪在您的邮件到达至少一次/只出现一次的保证。
- 队列:使用QoS 1或2和持久会话时,代理将在客户端未连接时将客户端从其订阅中丢失的所有消息排队。重新连接后,所有消息都会立即传递给您的客户端。
- 保留的消息:当您的客户端立即订阅这些主题之一时,将保留服务器上保留的消息。
- 最后遗嘱:如果您的客户没有正常断开连接,则可以向主题发布消息,以通知感兴趣的所有人您的客户死亡。
- 如果您的客户端通过持久会话连接到代理,则无需重新订阅客户端感兴趣的所有主题,因为以前的所有订阅都存储在服务器上。
websocket和MQTT如何配合在一起?
通过websocket发送的消息以帧的形式发送。这些帧只有2个字节的开销。现在,整个MQTT消息(及其所有标头和有效负载)都与websocket框架一起发送。
Websocket框架中的MQTT消息
HiveMQ希望每条MQTT消息都在一个websocket框架中发送。诸如Paho.js之类的常见Javascript MQTT库实现了此行为。
本机Websocket
HiveMQ实现所有的WebSocket标准(包括RFC6555,所有hixie和所有hybi草案)本身。这意味着,您不需要在HiveMQ MQTT代理实例前面的专用Web服务器来转发WebSocket连接。HiveMQ透明地处理HTTP Websocket升级和实际Websocket。代理将通过websocket的MQTT客户端连接视为等同于通过“纯TCP”的连接。
带有HiveMQ的Websocket-无需其他Web服务器
对于HiveMQ 3.x
编辑config.xml文件:
|
参考:https://www.hivemq.com/docs/hivemq/3.4/user-guide/introduction.html