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