WebSocket和Stomp协议

WebSocket和Stomp协议arrow-up-right

  1. webSocket介绍

    我们知道http协议是无状态协议,每次请求都只能由客户端发起,服务器进行响应。但是服务器不能主动发送消息给客户端。这种单向的协议在很多的业务场景中不适用,比如消息推送,实时消息详情等。在使用websocket前,我们通常可以使用轮询或者长链接来实现这种实时消息的需求。

1.1. 轮询 由客户端或者浏览器定时发request,然后服务器返回最新的数据给客户端。缺点很明显,浏览器需要不断向服务器发送请求,然而http的request的header非常长,但是实际需要的业务数据却是一个很小的值。需要消耗很多服务器资源和带宽资源。

01 1.2. 长链接 http 1.1 默认保持长链接,数据传输完成保持tcp链接不断开,等待在相同域名下继续使用这个通道传输数据。客户端的长链接不能无限期的拿着,会有一个超时时间,服务器有时候会告诉客户端超时时间,下图中的Keep-Alive: timeout=20,表示这个TCP通道可以保持20秒。另外还可能有max=XXX,表示这个长连接最多接收XXX次请求就断开。对于客户端来说,如果服务器没有告诉客户端超时时间也没关系,服务端可能主动发起四次握手断开TCP连接,客户端能够知道该TCP连接已经无效;另外TCP还有心跳包来检测当前连接是否还活着。

02 1.3. websocket Websocket是html5提出的一个协议规范,是为解决客户端与服务端实时通信。本质上是一个基于tcp,先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手后创建一个用于交换数据的TCP连接。只需要要做一个握手的动作,在建立连接之后,双方可以在任意时刻,相互推送信息。同时,服务器与客户端之间交换的头信息很小。

作者:JimmyOu 链接:https://www.jianshu.com/p/db21502518b9arrow-up-right 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Last updated