WebSocket与STOMP介绍

什么是websocket

推荐知乎上一篇通俗易懂的文章WebSocket 是什么原理?为什么可以实现持久连接?。

为什么要引入

http协议是无状态协议,即每次请求时都不知道前面发生的什么。而且请求只能由浏览器发起,服务器只能响应该请求,不能主动发送消息给浏览器。这种单向的协议显然在很多场景下是不适用的,比如消息推送,股票实时行情。在websocket之前,我们通常使用Ajax轮询服务器或者使用长轮询,这两种方式都极大消耗了服务端和客户端的资源。而使用websocket,我们只需要借用http协议进行握手,然后保持着一个websocket连接,知道客户端主动断开。相对于另外两种方式,websocket只发送了一次http请求,当服务器有数据时再向浏览器推送数据,减少了带宽的使用以及服务器CPU使用率。

Websocket、Http、TCP、Socket之间关系

HTTP、WebSocket 等应用层协议,都是基于 TCP 协议来传输数据的。
对于 WebSocket 来说,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。
Socket并不是一种协议,而是方便我们使用TCP/IP的一种封装,而 WebSocket 则不同,它是一个完整的 应用层协议,包含一套标准的 API 。

STOMP协议

STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。STOMP协议
许多公司都提供了基于STOMP的服务器与客户端,若spring4开始支持的spring-websocket服务端,基于浏览器的stomp.js客户端
STOMP定义了客户端和服务器之间以Frame进行同行,Frame的格式为:

COMMAND
header1:value1
header2:value2

Body^@

COMMAND分为CONNECT、SEND、SUBSCRIBE、UNSUBSCRIBE、BEGIN、COMMIT、ABORT、ACK、NACK、DISCONNECT这几种。
COMMAND之后下一行紧跟着的是头部的键值对,之后加入一条空行,空行之后为body,即传递的消息实体。

你可能感兴趣的:(websocket)