STOMP over websockets 与普通 STOMP。哪一个更好?

Posted

技术标签:

【中文标题】STOMP over websockets 与普通 STOMP。哪一个更好?【英文标题】:STOMP over websockets vs plain STOMP. Which one is better? 【发布时间】:2016-07-01 08:42:03 【问题描述】:

从 spring 4 开始,我们支持 STOMP (sub)protocol over WebSocket。我确实了解 WebSocket 与 HTTP 相比的好处以及使用 STOMP 而不是 WebSocket 的好处和好处,但我想了解以下内容:

    直接使用 stomp 协议与 MB 通信是否有任何性能优势(如 RabbitMQ 或 Kafka - 可能在未来)

    除了处理客户端连接到服务器/MB 所需的握手之外,使用STOMP 作为 Web 套接字上的子协议有什么好处吗

【问题讨论】:

【参考方案1】:

这些是正交问题。 Websocket 是一种传输方式;事实上,当使用sock.js 时,您可以使用许多传输作为后备,并且仍然使用 STOMP。

STOMP 描述了客户端和服务器之间交换的消息格式。

这就像要求比较 TCP 和 HTTP。

    您不能“只使用”STOMP 与服务器或消息代理进行通信。您必须使用传输来发送这些 STOMP 消息。 STOMP 不处理 websocket 握手,事实上,它根本不知道它。举个例子,您可以在 HTTP 之上透明地使用 STOMP,并且从 STOMP 的角度来看没有任何区别。

【讨论】:

关于您的观点 1)根据链接 rabbitmq.com/protocols.html 似乎我们可以使用 web-stomp(通过 http),但提到的默认 STOMP/MQTT/AMQP 不使用 HTTP。我不确定在没有底层 HTTP 的情况下握手是如何发生的,但必须进行调查 但是在“26.4.14 STOMP Client”的 spring 文档中写到有一个 STOMP over WebSocket 和一个 STOMP over TCP 客户端。所以在我的理解中,WebSocket 已经建立在 TCP 之上,所以基于 TCP 的 STOMP 将 WebSocket 层留在了两者之间?那么不将 WebSocket 层排除在外的好处在哪里呢?编辑:我想从服务器到服务器进行通信(所以不涉及浏览器)

以上是关于STOMP over websockets 与普通 STOMP。哪一个更好?的主要内容,如果未能解决你的问题,请参考以下文章

Spring STOMP over Websocket - “私人”消息传递

RabbitMQ Stomp over websocket:无法检索排队的消息

Spring with STOMP over SockJS 和 Tomcat 未升级到 Websockets

春天的 websocket stomp over sockjs 重定向到 http 协议,而在关键的 web 服务中起源是 https

SockJS over stomp 使用 angular2 和 spring boot

stomp.js websocket广播模式