WebSocket
服务器主动发送信息给客户端
HTTP不断轮询
伪服务器推送,前端代码不断发送http请求到服务器,服务器收到信息返回响应,例如扫码登录中不断询问后端二维码是否已经被扫
缺点:1HTTP请求多,2用户能感受到明显卡顿
长轮询
为HTTP请求设置一个长超时,服务器收到扫码请求后才返回响应到客户端网页,如果超时则由客户端发起下一次请求
这就是服务器推送技术
WebSocket
TCP两端,双方都可以同时发送数据给对方,是全双工的
而使用的HTTP协议是半双工的,同时只有一方能发送信息
为了支持客户端和服务端都要相互发送大量数据的场景研发了websocket
怎么建立连接
TCP三次握手后,统一使用http协议进行一次通信,如果想要建立websocket连接,则在http请求中带上特殊的头部

意思分别是
1升级协议
2指定协议为websocket
3随机生成的base64码
服务器支持websocket就走websocket握手流程,再根据base64码使用公开算法变成另一段字符串,放在响应的Sec-WebSocket-Accept头里,再带上101状态码(协议切换)发回给浏览器

同时浏览器也自己将base64码转换为对应字符串,并检查是否和服务器发回的字符串相同,这样一来一回就握手成功,使用websocket的数据格式进行通信
websocket的消息格式

opcode:标识数据帧类型,如1指text类型,2指二进制数据byte类型,8是关闭连接的信号
payload:存放真正想要传输数据的长度,单位是字节,有好几个位置,用户可以用前面的7,也可以7+16或7+64
读取时,先读前7位,若为126,则读后16位,若为127则读后64位
payload data:存放真正的数据
使用场景
使用客户端和服务端频繁交互的场景,例如网页/小程序游戏,聊天室和协同办公软件
浙公网安备 33010602011771号