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



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。

注意:其他人已经很好地解释了什么是WebSocketSTOMP,所以我将尝试添加缺失的部分。

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

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

  • 每个可以发送什么样的消息
  • 格式是什么
  • 每个消息的内容等等

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

参考

TLDR;STOMP是一个建立在websocket之上的框架,即STOMP在后台使用websocket。如果你正在考虑建立一个通知/消息系统,那么使用stomp。

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

相关内容

最新更新