Websocket教程

Posted by Aldy on 2026-01-30
Estimated Reading Time 1 Minutes
Words 394 In Total
Viewed Times

简介

什么是WebSocket?

WebSocket是基于TCP的协议
不同于简单的http协议(比如RESTful API风格的实现),可以做到实时双向的连接
WebSocket的一个主要特点是服务器可以主动向客户端(或浏览器)发送信息,不需要客户端持续请求
举例:聊天室、进度条

这是怎么实现的?

WebSocket客户端需要持续监听TCP连接。
举个例子,一般的现代浏览器都有独立的网络进程,处理网络数据。
更底层地,客户端收到数据的路径如下: 物理介质->网卡->内核(网卡向内核发送信号)->应用程序(内核唤醒进程)
这样就可以理解监听的持续性

连接过程

WebSocket连接通过http升级机制建立

1.客户端请求

1
2
3
4
5
6
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== (随机)
Sec-WebSocket-Version: 13
这里是客户端向服务器请求把http协议升级成WebSocket。也可以看出WebSocket需要http的参与

2.服务器响应

1
2
3
4
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
这样服务器和客户端就升级成WebSocket协议了

3.数据传输

WebSocket 数据采用帧(Frame)格式传输。具体包含长度,类型,数据等等,没必要全部了解。
其中帧的类型有两个比较特殊:PingPong。被称为心跳检测(前者)。这是服务器主动向客户端发送的,用来看看客户端状态是否正常,客户端如果正常会返回Pong