WebSocket和STOMP协议之间的主要区别是什么?
Answers:
这个问题类似于询问TCP和HTTP之间的区别。我仍然会尝试解决您的问题,如果您开始的话,这两个词之间自然会混淆。
简短答案
STOMP派生于WebSockets之上。STOMP只是提到了一些有关如何使用WebSocket在客户端和服务器之间交换消息帧的特定方法。
长答案
Web套接字
这是一个规范,允许客户端和服务器之间进行同步双向通信。与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是一种简单的面向文本的消息传递协议。
当Web应用程序需要支持与Web服务器的双向通信时,通常在Web套接字内使用STOMP协议。
一个很好的教程是Jeff Mesnill(2012)的《基于WebSocket的STOMP》
STOMP也可以在没有网络套接字的情况下使用,例如通过Telnet连接或消息代理服务。
原始WebSockets无需STOMP即可使用-例如。没有STOMP和SockJs的Spring Boot + WebSocket示例。