WebSocket和STOMP协议之间的主要区别是什么?
这个问题类似于询问TCP和HTTP之间的区别。我仍然会尝试回答你的问题,如果你刚开始,很自然会混淆这两个术语。
简短回答
STOMP通常是在更专业的协议(如WebSockets)之上实现的。STOMP描述了使用Websocket 等底层协议在客户端和服务器之间交换消息帧的特定格式
长应答
WebSockets
它是一种允许客户端和服务器之间进行异步双向通信的规范。虽然与TCP套接字类似,但它是一种作为升级的HTTP连接运行的协议,在双方之间交换可变长度的帧,而不是流。
STOMP
它为客户端和服务器定义了一个使用消息传递语义进行通信的协议。它没有定义任何实现细节,而是为消息集成提供了一个易于实现的有线协议。它在WebSockets协议之上提供了更高的语义,并定义了映射到WebSockets帧上的少数帧类型。其中一些类型是。。。
- 连接
- 认购
- 取消订阅
- send(发送到服务器的消息)
- message(用于从服务器发送的消息)BEGIN、COMMIT、ROLLBACK(交易管理)
WebSocket确实暗示了一种消息传递体系结构,但并不强制使用任何特定的消息传递协议。它是TCP上的一个非常薄的层,可以将字节流转换为消息流(文本或二进制),而不是更多。由应用程序来解释消息的含义。
与HTTP不同,HTTP是一种应用程序级协议,在WebSocket协议中,传入消息中没有足够的信息让框架或容器知道如何路由或处理它。因此,对于一个非常琐碎的应用程序来说,WebSocket的级别可能太低了。这是可以做到的,但很可能会导致在顶部创建一个框架。这与当今大多数web应用程序使用web框架而不是单独使用Servlet API编写的方式相当。
出于这个原因,WebSocket RFC定义了子协议的使用。在握手期间,客户端和服务器可以使用标头Sec-WebSocket协议来商定子协议,即要使用的更高的应用程序级别协议。不需要使用子协议,但即使不使用,应用程序仍需要选择客户端和服务器都能理解的消息格式。该格式可以是自定义的、特定于框架的或标准消息传递协议。
STOMP—一个简单的消息传递协议,最初创建用于受HTTP启发的框架的脚本语言。STOMP得到广泛支持,非常适合在WebSocket和web上使用。
WebSocket API使web应用程序能够处理双向通信,而STOMP是一种简单的面向文本的消息传递协议。双向WebSocket允许web服务器向客户端发起新消息,而不是等待客户端请求更新。该消息可以是客户端和服务器同意的任何协议
STOMP协议通常在web套接字中使用。
一个很好的教程是Jeff Mesnil的STOMP Over WebSocket(2012)
STOMP也可以在没有网络套接字的情况下使用,例如通过Telnet连接或消息中断服务。
Raw WebSockets可以在没有STOMP的情况下使用,例如,Spring Boot+WebSocket示例中没有STOMP和SockJs。
注意:其他人已经很好地解释了什么是WebSocket和STOMP,所以我将尝试添加缺失的部分。
WebSocket协议定义了两种类型的消息(文本和二进制),但它们的内容未定义。
STOMP协议定义了一种机制,用于客户端和服务器协商子协议(即更高级别的消息传递协议),以便在WebSocket之上使用,以定义以下内容:
- 每个可以发送什么样的消息
- 格式是什么
- 每个消息的内容等等
子协议的使用是可选的,但无论哪种方式,客户端和服务器都需要就定义消息内容的某些协议达成一致。
参考
TLDR;STOMP是一个建立在websocket之上的框架,即STOMP在后台使用websocket。如果你正在考虑建立一个通知/消息系统,那么使用stomp。
https://stomp.github.io/stomp-specification-1.2.html