一、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://juejin.im/post/5afab6e651882542ba07eb41?utm_medium=fe&utm_source=weixinqun
网友评论