WebSocket和STOMP协议之间的区别是什么?

kxe2p93d  于 2023-08-05  发布在  其他
关注(0)|答案(5)|浏览(130)

WebSocket和STOMP协议的主要区别是什么?

fdx2calv

fdx2calv1#

这个问题类似于询问TCP和HTTP之间的区别。我仍然会尝试解决你的问题,如果你开始的话,很自然会在这两个术语之间混淆。

简短回答

STOMP通常在更专业的协议(如WebSockets)之上实现。STOMP描述了使用WebSocket等底层协议在客户端和服务器之间交换消息帧的特定格式

长答案

  • WebSocket *

它是一种允许客户端和服务器之间进行异步双向通信的规范。虽然类似于TCP套接字,但它是一种作为升级的HTTP连接运行的协议,在双方之间交换可变长度的帧,而不是流。

  • 停下 *

它为客户端和服务器定义了一个协议,以便使用消息传递语义进行通信。它没有定义任何实现细节,而是提供了一个易于实现的消息集成有线协议。它在WebSockets协议之上提供了更高的语义,并定义了一些Map到WebSockets帧的帧类型。其中一些类型是…

  • 连结
  • 订阅
  • 取消订阅
  • send(发送到服务器的消息)
  • message(用于从服务器发送的消息)开始、COMMIT、ROLLBACK(事务管理)
xa9qqrwz

xa9qqrwz2#

WebSocket确实暗示了消息传递架构,但并不强制使用任何特定的消息传递协议。它是TCP上非常薄的一层,它将字节流转换为消息流(文本或二进制),仅此而已。由应用程序来解释消息的含义。

与HTTP不同,HTTP是一种应用程序级协议,在WebSocket协议中,传入消息中没有足够的信息让框架或容器知道如何路由或处理它。因此,WebSocket可以说是太低级了,除了一个非常琐碎的应用程序。这是可以做到的,但它可能会导致在顶部创建一个框架。这与当今大多数Web应用程序使用Web框架而不是单独使用Servlet API编写的方式相当。
出于这个原因,WebSocket RFC定义了子协议的使用。在握手期间,客户端和服务器可以使用头部Sec-WebSocket-Protocol来商定子协议,即使用更高的应用程序级协议。不需要使用子协议,但即使不使用,应用程序仍需要选择客户端和服务器都能理解的消息格式。该格式可以是自定义的、特定于框架的或标准的消息传递协议。

STOMP - 一个简单的消息传递协议,最初是为在脚本语言中使用而创建的,其框架受到HTTP的启发。STOMP得到广泛支持,非常适合在WebSocket和Web上使用。

8yoxcaq7

8yoxcaq73#

WebSocket API使Web应用程序能够处理双向通信,而STOMP是一个简单的面向文本的消息传递协议。双向WebSocket允许Web服务器向客户端发起新消息,而不是等待客户端请求更新。消息可以是客户端和服务器同意的任何协议。
STOMP协议通常在Web Socket中使用。
一个很好的教程是STOMP Over WebSocket由杰夫Mesnill(2012)
STOMP也可以在没有WebSocket的情况下使用,例如通过Telnet连接或消息代理服务。
Raw WebSockets可以在没有STOMP的情况下使用。Spring Boot + WebSocket example without STOMP and SockJs

vbkedwbf

vbkedwbf4#

注意:其他人已经很好地解释了什么是WebSocketSTOMP,所以我将尝试添加缺失的位。
WebSocket协议定义了两种类型的消息**(文本和二进制),但其内容未定义。
STOMP协议定义了客户端和服务端协商一个子协议(即更高级别的消息协议)的机制,在
WebSocket**之上使用,定义了以下内容:

  • 每一个可以发送什么类型的消息,
  • 格式是什么,
  • 每个消息的内容等等。

子协议的使用是可选的,但无论哪种方式,客户端和服务器都需要就定义消息内容的某些协议达成一致。
参考文献

hfwmuf9z

hfwmuf9z5#

TLDR; STOMP是一个建立在websockets之上的框架,即Stomp在后台使用WebSocket。如果你正在考虑构建一个通知/消息系统,那么使用stomp。
https://stomp.github.io/stomp-specification-1.2.html

相关问题