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。
5条答案
按热度按时间fdx2calv1#
这个问题类似于询问TCP和HTTP之间的区别。我仍然会尝试解决你的问题,如果你开始的话,很自然会在这两个术语之间混淆。
简短回答
STOMP通常在更专业的协议(如WebSockets)之上实现。STOMP描述了使用WebSocket等底层协议在客户端和服务器之间交换消息帧的特定格式
长答案
它是一种允许客户端和服务器之间进行异步双向通信的规范。虽然类似于TCP套接字,但它是一种作为升级的HTTP连接运行的协议,在双方之间交换可变长度的帧,而不是流。
它为客户端和服务器定义了一个协议,以便使用消息传递语义进行通信。它没有定义任何实现细节,而是提供了一个易于实现的消息集成有线协议。它在WebSockets协议之上提供了更高的语义,并定义了一些Map到WebSockets帧的帧类型。其中一些类型是…
xa9qqrwz2#
WebSocket确实暗示了消息传递架构,但并不强制使用任何特定的消息传递协议。它是TCP上非常薄的一层,它将字节流转换为消息流(文本或二进制),仅此而已。由应用程序来解释消息的含义。
与HTTP不同,HTTP是一种应用程序级协议,在WebSocket协议中,传入消息中没有足够的信息让框架或容器知道如何路由或处理它。因此,WebSocket可以说是太低级了,除了一个非常琐碎的应用程序。这是可以做到的,但它可能会导致在顶部创建一个框架。这与当今大多数Web应用程序使用Web框架而不是单独使用Servlet API编写的方式相当。
出于这个原因,WebSocket RFC定义了子协议的使用。在握手期间,客户端和服务器可以使用头部Sec-WebSocket-Protocol来商定子协议,即使用更高的应用程序级协议。不需要使用子协议,但即使不使用,应用程序仍需要选择客户端和服务器都能理解的消息格式。该格式可以是自定义的、特定于框架的或标准的消息传递协议。
STOMP - 一个简单的消息传递协议,最初是为在脚本语言中使用而创建的,其框架受到HTTP的启发。STOMP得到广泛支持,非常适合在WebSocket和Web上使用。
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。
vbkedwbf4#
注意:其他人已经很好地解释了什么是WebSocket和STOMP,所以我将尝试添加缺失的位。
WebSocket协议定义了两种类型的消息**(文本和二进制),但其内容未定义。
STOMP协议定义了客户端和服务端协商一个子协议(即更高级别的消息协议)的机制,在WebSocket**之上使用,定义了以下内容:
子协议的使用是可选的,但无论哪种方式,客户端和服务器都需要就定义消息内容的某些协议达成一致。
参考文献
hfwmuf9z5#
TLDR; STOMP是一个建立在websockets之上的框架,即Stomp在后台使用WebSocket。如果你正在考虑构建一个通知/消息系统,那么使用stomp。
https://stomp.github.io/stomp-specification-1.2.html