通过Websockets传输的STOMP与普通STOMP相比,哪一个更好?

9
从Spring 4开始,我们支持在WebSocket上使用STOMP(sub)协议。我理解WebSocket相比HTTP的优势,使用STOMP over WebSocket的好处和用途,但我想了解以下内容:
1. 直接使用STOMP协议与MB(如RabbitMQ或Kafka-可能是未来)进行通信是否有性能优势?
2. 除了处理客户端连接到服务器/ MB所需的握手外,使用STOMP作为子协议是否有其他好处?
1个回答

15

这些是正交关注点。

Websocket 是一种传输方式;实际上,使用 sock.js 时,您可以使用许多降级的传输方式,并仍然使用 STOMP。

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

这就像要求比较 TCP 和 HTTP 一样。

  1. 您无法“只是使用” STOMP 与服务器或消息代理进行通信。您必须使用传输方式发送这些 STOMP 消息。
  2. STOMP 不负责 websocket 握手,实际上,它根本不知道 websocket。事实上,您可以在 HTTP 上面透明地使用 STOMP,并且从 STOMP 视角看不到任何区别。

关于您提到的第一点,根据链接https://www.rabbitmq.com/protocols.html,似乎我们可以使用web-stomp(通过http),但是默认的STOMP/MQTT/AMQP并不使用HTTP。我不确定在没有底层HTTP的情况下如何进行握手,但我需要进行调查。 - Himanshu Jain
但在Spring文档的“26.4.14 STOMP客户端”中写道,有一个基于WebSocket和一个基于TCP的STOMP客户端。因此,在我的理解中,WebSocket已经建立在TCP之上,因此STOMP over TCP会留下WebSocket层之间的差距?那么不留出WebSocket层的好处在哪里?编辑:我想从服务器与服务器通信(因此不涉及浏览器)。 - tObi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接