简介
什么是WebSocket?
WebSocket是基于TCP的协议
不同于简单的http协议(比如RESTful API风格的实现),可以做到实时,双向的连接
WebSocket的一个主要特点是服务器可以主动向客户端(或浏览器)发送信息,不需要客户端持续请求
举例:聊天室、进度条
这是怎么实现的?
WebSocket客户端需要持续监听TCP连接。
举个例子,一般的现代浏览器都有独立的网络进程,处理网络数据。
更底层地,客户端收到数据的路径如下: 物理介质->网卡->内核(网卡向内核发送信号)->应用程序(内核唤醒进程)
这样就可以理解监听的持续性
连接过程
WebSocket连接通过http升级机制建立
1.客户端请求
1
2
3
4
5
6
GET /chat
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== (随机)
Sec-WebSocket-Version: 13
这里是客户端向服务器请求把http协议升级成WebSocket。也可以看出WebSocket需要http的参与
2.服务器响应
1
2
3
4
101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
这样服务器和客户端就升级成WebSocket协议了
3.数据传输
WebSocket 数据采用帧(Frame)格式传输。具体包含长度,类型,数据等等,没必要全部了解。
其中帧的类型有两个比较特殊:Ping和Pong。被称为心跳检测(前者)。这是服务器主动向客户端发送的,用来看看客户端状态是否正常,客户端如果正常会返回Pong。