手记

WebSocket(长链接)

一、WebSocket 定义

WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输。

但它跟 HTTP 没什么关系,它是基于 TCP 的一种独立实现。

WebSocket的出现,使得浏览器具备了实时双向通信的能力。

HTTP 协议有一个缺陷:通信只能由客户端发起。

WebSocket优点:支持双向通信,更灵活,更高效,可扩展性更好。

二、以前客户端如何处理服务端的进度

1、Ajax 轮询

ajax轮询的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。

ajax轮询 需要服务器有很快的处理速度和资源。(速度)

2、 long poll 的方式

原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话)

long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)

三、WebSocket 解决了 HTTP 的这几个难题。当服务器完成协议升级后( HTTP -> WebSocket )

1、服务端可以主动推送信息给客户端,解决了轮询造成的同步延迟问题。

2、由于 WebSocket 只需要一次 HTTP 握手,服务端就能一直与客户端保持通信,直到关闭连接,这样就解决了服务器需要反复解析 HTTP 协议,减少了资源的开销。

WebSockets

四、主流浏览器对 WebSocket 的支持情况比较好(不兼容低版本 IE,IE 10 以下)

WebSocket浏览器

五、这些需求可以考虑使用 WebSocket:

1、多个用户之间进行交互;

2、需要频繁地向服务端请求更新数据。

比如弹幕、消息订阅、多玩家游戏、协同编辑、股票基金实时报价、视频会议、在线教育等需要高实时的场景。

六、websocket 请求报文

1) 客户端请求报文:

重点请求首部意义如下:

Connection: Upgrade:表示要升级协议
Upgrade: websocket:表示要升级到websocket协议。

Sec-WebSocket-Version: 13:表示websocket的版本。如果服务端不支持该版本,需要返回一个Sec-WebSocket-Versionheader,里面包含服务端支持的版本号。

Sec-WebSocket-Key:与后面服务端响应首部的Sec-WebSocket-Accept是配套的,提供基本的防护,比如恶意的连接,或者无意的连接。

例如:
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13
Upgrade: websocket
Connection: Upgrade

这个就是Websocket的核心了,告诉 Apache 、 Nginx 等服务器

2) 服务端响应报文 Header

服务端返回内容如下,状态代码101表示协议切换。到此完成协议升级,后续的数据交互都按照新的协议来。

HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU=
Sec-WebSocket-Protocol: chat

说明:
101 状态码表示服务器已经理解了客户端的请求,并将通过 Upgrade 消息头通知客户端采用不同的协议来完成这个请求;

Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key;
Sec-WebSocket-Protocol 则是表示最终使用的协议。



作者:枫之伊信
链接:https://www.jianshu.com/p/8667c85f68e1


0人推荐
随时随地看视频
慕课网APP