Nit*_*ate 64
这个问题类似于询问TCP和HTTP之间的区别.我仍然会尝试解决你的问题,如果你开始,我很自然会在这两个术语之间混淆.
简答
STOMP是在WebSockets之上派生的.STOMP刚刚提到了一些关于如何使用WebSockets在客户端和服务器之间交换消息帧的特定方法.
答案很长
的WebSockets
它是允许客户端和服务器之间进行同步双向通信的规范.虽然类似于TCP套接字,但它是一个协议,作为升级的HTTP连接运行,在双方之间交换可变长度的帧,而不是流.
STOMP
它定义了客户端和服务器与消息传递语义进行通信的协议.它没有定义任何实现细节,而是针对消息传递集成提供易于实现的有线协议.它在WebSockets协议之上提供了更高的语义,并定义了一些映射到WebSockets帧的帧类型.其中一些类型是......
Ann*_*ein 16
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示例。