WebSocket

服务器主动发送信息给客户端

HTTP不断轮询

伪服务器推送,前端代码不断发送http请求到服务器,服务器收到信息返回响应,例如扫码登录中不断询问后端二维码是否已经被扫

缺点:1HTTP请求多,2用户能感受到明显卡顿

长轮询

为HTTP请求设置一个长超时,服务器收到扫码请求后才返回响应到客户端网页,如果超时则由客户端发起下一次请求

这就是服务器推送技术

WebSocket

TCP两端,双方都可以同时发送数据给对方,是全双工的

而使用的HTTP协议是半双工的,同时只有一方能发送信息

为了支持客户端和服务端都要相互发送大量数据的场景研发了websocket

怎么建立连接

TCP三次握手后,统一使用http协议进行一次通信,如果想要建立websocket连接,则在http请求中带上特殊的头部

image-20250814115605407

意思分别是

1升级协议

2指定协议为websocket

3随机生成的base64码

服务器支持websocket就走websocket握手流程,再根据base64码使用公开算法变成另一段字符串,放在响应的Sec-WebSocket-Accept头里,再带上101状态码(协议切换)发回给浏览器

image-20250814115837971

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

websocket的消息格式

image-20250814120002304

opcode:标识数据帧类型,如1指text类型,2指二进制数据byte类型,8是关闭连接的信号

payload:存放真正想要传输数据的长度,单位是字节,有好几个位置,用户可以用前面的7,也可以7+16或7+64

读取时,先读前7位,若为126,则读后16位,若为127则读后64位

payload data:存放真正的数据

使用场景

使用客户端和服务端频繁交互的场景,例如网页/小程序游戏,聊天室和协同办公软件

posted on 2025-08-14 12:05  chycal  阅读(9)  评论(0)    收藏  举报