【发布时间】:2016-03-16 23:27:39
【问题描述】:
当直接从 Web 服务器向 Web 浏览器发布/订阅消息或反之亦然时,我们可以使用 MQTT over WebSockets。同时,可以使用 SSE(半双工)将数据从 Web 服务器推送到 Web 浏览器。其他主要区别是什么?尤其是应用程序的相关安全性和一致性。
【问题讨论】:
当直接从 Web 服务器向 Web 浏览器发布/订阅消息或反之亦然时,我们可以使用 MQTT over WebSockets。同时,可以使用 SSE(半双工)将数据从 Web 服务器推送到 Web 浏览器。其他主要区别是什么?尤其是应用程序的相关安全性和一致性。
【问题讨论】:
WebSocket 是由 IETF 标准化的低级(框架)传输和由 W3C 标准化的 JavaScript API。它不是发布/订阅。您可以拥有位于 WebSocket“顶部”的发布/订阅协议。例如,AMQP 是一个可以用 WebSocket 实现的 pub/sub 协议。另一个例子是 Java 消息服务 (JMS);虽然 JMS 是一种 API 而不是位协议,但它可以通过 pub/sub 协议实现,而后者又可以通过 WS 实现。我提到 AMQP 和 JMS 是因为 AMQP 协议和 JMS API 都提供“确认”,与其他机制不同,这将为您提供高度的可靠性。
MQTT 是一种发布/订阅协议,可以通过低级传输实现。例如,MQTT 可以通过 TCP/IP 或 WebSocket 运行。 MQTT 具有 QoS 级别,它也给您确认(即,可靠性)。 MQTT 通常不是浏览器原生的,因此在连接到浏览器之前必须使 MQTT 消息对网络友好……通常是 WebSocket,因为 WS 是一个“胖管道”,在某种程度上类似于 TCP。
服务器发送事件 (SSE) 是 HTML5 形式的“Comet”(或“反向 AJAX”)技术。“Comet”是非正式技术的松散集合;不同的实现不能一起工作。SSE 不发布/订阅. 它是一种将数据从服务器广播到浏览器客户端的 HTTP 机制。本质上它是一种即发即弃的技术。
大多数现代浏览器都支持 SSE 和 WS(IE/EDGE 目前不支持 SSE);他们通常也都了解 Secure WebSocket (WSS)。几乎所有的网络服务器和应用服务器都了解 SSE 和 WS/WSS。如果您使用 WSS,您的数据将在传输过程中被加密。在连接上设置了特定的加密密码;您必须调查您的浏览器客户端和网络/应用程序服务器所理解的密码。
【讨论】:
MQTT 提供 3 种不同的 QOS 级别来控制消息的传递
QOS 0 - 尽力而为 QOS 1 - 至少一次 QOS 2 - 仅一次
MQTT 支持用户身份验证和主题级别 ACL,因此即使使用通配符订阅,您也可以确保用户只看到他们需要查看的内容
MQTT 还允许直接连接到后端系统,而无需在 WebApp 中进行桥接
【讨论】: