3.7-双向通信
Create by fall on 2021---- Recently revised in ----
WebSocket
浏览器与服务器进行全双工通讯的网络技术,应用协议,基于 TCP 传输协议,复用 HTTP 的握手通道。
WebSocket 本质上一种计算机网络应用层的协议,用来弥补 http 协议在持久通信能力上的不足。服务器也可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
- 双向通信,实时性更强
- 二进制支持
- 控制开销少,创建后,WebSocket 客户端、服务端数据交互时,头部包小
- 支持扩展,用户可以扩展协议
socket.io
,ws
是经常用到的两个库,后者更加轻量
建立连接
WebSocket 复用了 HTTP 的握手通道,客户端通过 HTTP 请求与 WebSocket 服务端协商升级协议,协议升级完成后,数据交换遵循 WebSocket 协议
请求协议升级
请求头:
Connection:Upgrade
表示升级协议Upgrade:websocket
表示升级协议到 websocketSec-WebSocket-Version:13
表示 websocket 的版本,如果服务器不支持该版本,服务器要返回该头,表示服务器支持的版本号Sec-WebSocket-Key
与首部Sec-WebSocket-Accept
配套,提供基本防护,恶意的链接,无意的链接
响应协议升级
状态码 101 表示协议切换,到此完成协议升级,自此之后的数据都按照新的协议来
HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU=
Sec-WebSocket-Accept
Sec-WebSocket-Accept
根据客户端请求首部的 Sec-WebSocket-Key
计算出来
计算公式为:
- 将
Sec-WebSocket-Key
和258EAFA5-E914-47DA-95CA-C5AB0DC85B11
拼接 - 通过 SHA1(不知有没有更新为 SHA2)计算出摘要,并转成 base64
EventSource
等待补充
断开的原因
时间过久
服务端异常
参考文章
文章名称/作者 | 链接 |
---|---|
Gaby | https://juejin.cn/post/7020964728386093093(还需补充 |
程序猿小卡 | https://juejin.cn/post/6844903544978407431 |