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

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

73032 次浏览

这个问题类似于询问 TCP 和 HTTP 之间的区别。我还是要试着回答你的问题,如果你刚开始,很自然地会把这两个术语混淆起来。

简短的回答

STOMP 派生于 WebSocket 之上。STOMP 只是提到了一些关于如何使用 WebSocket 在客户机和服务器之间交换消息帧的特定方法。


长答案

WebSockets

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

跺脚

它定义了一个用于客户端和服务器与消息传递语义进行通信的协议。它没有定义任何实现细节,而是为消息传递集成提供了一个易于实现的有线协议。它在 WebSocket 协议的基础上提供了更高的语义,并定义了一些映射到 WebSocket 框架的框架类型。有些人是..。

  • 连接
  • 订阅
  • 取消订阅
  • 发送(发送到服务器的消息)
  • Message (用于从服务器发送的消息) BEGIN、 COMMIT、 ROLLback (交易管理)

WebSocket API 使 Web 应用程序能够处理双向通信,而 STOMP 是一个简单的面向文本的消息传递协议。双向 WebSocket 允许 Web 服务器向客户端发起新消息,而不是等待客户端请求更新。消息可以在客户端和服务器同意的任何协议中。

STOMP 协议通常在 web 套接字中使用。

一个很好的教程是由 Jeff Mesnill 编写的 基于 WebSocket 的 STOMP(2012)

STOMP 也可以在没有 websocket 的情况下使用,例如通过 Telnet 连接或消息代理服务。

原始 WebSockets 可以不使用 STOMP-Eg.没有 STOMP 和 SockJs 的 Spring Boot + WebSocket 示例

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

与应用程序级协议 HTTP 不同,在 WebSocket 协议中,传入消息中没有足够的信息供框架或容器知道如何路由或处理消息。因此,WebSocket 对于除了非常琐碎的应用程序之外的任何应用程序来说,都可以说是太低级了。这是可以做到的,但它可能会导致在顶部创建一个框架。这与当今大多数 Web 应用程序是如何使用 Web 框架而不是仅仅使用 Servlet API 编写的相当。

出于这个原因,WebSocketRFC 定义了子协议的使用。在握手过程中,客户端和服务器可以使用报头 Sec-WebSocket-Protocol 来商定一个子协议,也就是要使用的更高的应用程序级协议。不需要使用子协议,但是即使不使用,应用程序仍然需要选择客户机和服务器都能理解的消息格式。该格式可以是自定义的、特定于框架的或标准的消息传递协议。

STOMP ー一个简单的消息传递协议,最初创建于脚本语言中,其框架灵感来自 HTTP。STOMP 受到广泛支持,非常适合在 WebSocket 和 Web 上使用。

注意: 其他人已经很好地解释了什么是 WebSocket跺脚,所以我将尝试添加缺少的位。

WebSocket协议定义了两种类型的消息 (文本和二进制),但是它们的内容是未定义的。

STOMP protocol 为客户机和服务器定义了一种机制,用于协商子协议(即更高级别的消息传递协议) ,以便在 WebSocket之上使用该协议来定义以下内容:

  • 每个人可以发送什么样的信息,
  • 格式是什么,
  • 每条信息的内容等等。

子协议的使用是可选的,但无论如何,客户机和服务器都需要就定义消息内容的某些协议达成一致。

参考文献

STOMP 是一个构建在 websockets 之上的框架,也就是说,tomp 在后台利用了 websockets。如果您正在考虑构建一个通知/消息传递系统,那么可以使用 tomp。

Https://stomp.github.io/stomp-specification-1.2.html