【发布时间】:2017-04-20 15:49:21
【问题描述】:
WebSocket 和 STOMP 协议的主要区别是什么?
【问题讨论】:
WebSocket 和 STOMP 协议的主要区别是什么?
【问题讨论】:
这个问题类似于询问 TCP 和 HTTP 的区别。我仍然会尝试解决您的问题,如果您刚开始,很自然会混淆这两个术语。
简答
STOMP 是在 WebSockets 之上派生的。 STOMP 只是提到了一些关于如何使用 WebSockets 在客户端和服务器之间交换消息帧的具体方式。
长答案
WebSockets
它是允许客户端和服务器之间异步双向通信的规范。虽然类似于 TCP 套接字,但它是一种作为升级的 HTTP 连接运行的协议,在双方之间交换可变长度的帧,而不是流。
猛冲
它为客户端和服务器定义了一个协议,以与消息语义进行通信。它没有定义任何实现细节,而是解决了一个易于实现的用于消息传递集成的有线协议。它在 WebSockets 协议之上提供了更高的语义,并定义了一些映射到 WebSockets 帧的帧类型。其中一些类型是...
【讨论】:
WebSocket 确实暗示了一种消息传递架构,但不强制要求使用任何特定的消息传递协议。它是 TCP 上的一个非常薄的层,将字节流转换为消息流(文本或二进制),仅此而已。由应用程序来解释消息的含义。
与作为应用程序级协议的 HTTP 不同,在 WebSocket 协议中,传入消息中根本没有足够的信息让框架或容器知道如何路由或处理它。因此 WebSocket 可以说是太低级了,除了一个非常微不足道的应用程序。它可以完成,但它可能会导致在顶部创建一个框架。这类似于当今大多数 Web 应用程序是使用 Web 框架而不是单独使用 Servlet API 编写的。
因此,WebSocket RFC 定义了子协议的使用。在握手期间,客户端和服务器可以使用标头 Sec-WebSocket-Protocol 就子协议达成一致,即要使用的更高的应用程序级协议。不需要使用子协议,但即使不使用,应用程序仍然需要选择客户端和服务器都可以理解的消息格式。该格式可以是自定义的、特定于框架的或标准的消息传递协议。
STOMP — 一种简单的消息传递协议,最初创建用于带有受 HTTP 启发的框架的脚本语言。 STOMP 得到广泛支持,非常适合在 WebSocket 和 Web 上使用。
【讨论】:
WebSocket API 使 Web 应用程序能够处理双向通信,而 STOMP 是一个简单的面向文本的消息传递协议。
当网络应用需要支持与网络服务器的双向通信时,STOMP 协议通常在网络套接字中使用。
Jeff Mesnill (2012) 的 STOMP Over WebSocket 是一个很好的教程
STOMP 也可以在没有 websocket 的情况下使用,例如通过 Telnet 连接或消息代理服务。
并且可以在没有 STOMP 的情况下使用 Raw WebSockets - 例如。 Spring Boot + WebSocket example without STOMP and SockJs.
【讨论】:
注意:其他人已经很好地解释了 WebSocket 和 STOMP 是什么,所以我将尝试添加缺少的位。 p>
WebSocket 协议定义了两种类型的消息(文本和二进制),但它们的内容是未定义的。
STOMP 协议定义了客户端和服务器协商子协议(即更高级别的消息传递协议)以在 WebSocket 之上使用的机制定义以下内容:
子协议的使用是可选的,但无论哪种方式,客户端和服务器都需要就定义消息内容的某些协议达成一致。
【讨论】: