Skip to content

Commit 7b0d616

Browse files
committed
[docs update]网络部分添加Websocket的介绍
1 parent f19b6b1 commit 7b0d616

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed

docs/cs-basics/network/application-layer-protocol.md

+28
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,34 @@ HTTP 协议基于 TCP 协议,发送 HTTP 请求之前首先要建立 TCP 连
1717

1818
另外, HTTP 协议是”无状态”的协议,它无法记录客户端用户的状态,一般我们都是通过 Session 来记录客户端用户的状态。
1919

20+
## Websocket:全双工通信协议
21+
22+
WebSocket 是一种基于 TCP 连接的全双工通信协议,即客户端和服务器可以同时发送和接收数据。
23+
24+
WebSocket 协议在 2008 年诞生,2011 年成为国际标准,几乎所有主流较新版本的浏览器都支持该协议。不过,WebSocket 不只能在基于浏览器的应用程序中使用,很多编程语言、框架和服务器都提供了 WebSocket 支持。
25+
26+
WebSocket 协议本质上是应用层的协议,用于弥补 HTTP 协议在持久通信能力上的不足。客户端和服务器仅需一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
27+
28+
![Websocket 示意图](https://oss.javaguide.cn/github/javaguide/system-design/web-real-time-message-push/1460000042192394.png)
29+
30+
下面是 WebSocket 的常见应用场景:
31+
32+
- 视频弹幕
33+
- 实时消息推送,详见[Web 实时消息推送详解](https://javaguide.cn/system-design/web-real-time-message-push.html)这篇文章
34+
- 实时游戏对战
35+
- 多用户协同编辑
36+
- 社交聊天
37+
- ……
38+
39+
WebSocket 的工作过程可以分为以下几个步骤:
40+
41+
1. 客户端向服务器发送一个 HTTP 请求,请求头中包含 `Upgrade: websocket``Sec-WebSocket-Key` 等字段,表示要求升级协议为 WebSocket;
42+
2. 服务器收到这个请求后,会进行升级协议的操作,如果支持 WebSocket,它将回复一个 HTTP 101 状态码,响应头中包含 ,`Connection: Upgrade``Sec-WebSocket-Accept: xxx` 等字段、表示成功升级到 WebSocket 协议。
43+
3. 客户端和服务器之间建立了一个 WebSocket 连接,可以进行双向的数据传输。数据以帧(frames)的形式进行传送,WebSocket 的每条消息可能会被切分成多个数据帧(最小单位)。发送端会将消息切割成多个帧发送给接收端,接收端接收消息帧,并将关联的帧重新组装成完整的消息。
44+
4. 客户端或服务器可以主动发送一个关闭帧,表示要断开连接。另一方收到后,也会回复一个关闭帧,然后双方关闭 TCP 连接。
45+
46+
另外,建立 WebSocket 连接之后,通过心跳机制来保持 WebSocket 连接的稳定性和活跃性。
47+
2048
## SMTP:简单邮件传输(发送)协议
2149

2250
**简单邮件传输(发送)协议(SMTP,Simple Mail Transfer Protocol)** 基于 TCP 协议,是一种用于发送电子邮件的协议

docs/cs-basics/network/other-network-questions.md

+43
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,49 @@ GET 和 POST 是 HTTP 协议中两种常用的请求方法,它们在不同的
260260

261261
再次提示,重点搞清两者在语义上的区别即可,实际使用过程中,也是通过语义来区分使用 GET 还是 POST。不过,也有一些项目所有的请求都用 POST,这个并不是固定的,项目组达成共识即可。
262262

263+
## WebSocket
264+
265+
### 什么是 WebSocket?
266+
267+
WebSocket 是一种基于 TCP 连接的全双工通信协议,即客户端和服务器可以同时发送和接收数据。
268+
269+
WebSocket 协议在 2008 年诞生,2011 年成为国际标准,几乎所有主流较新版本的浏览器都支持该协议。不过,WebSocket 不只能在基于浏览器的应用程序中使用,很多编程语言、框架和服务器都提供了 WebSocket 支持。
270+
271+
WebSocket 协议本质上是应用层的协议,用于弥补 HTTP 协议在持久通信能力上的不足。客户端和服务器仅需一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
272+
273+
![Websocket 示意图](https://oss.javaguide.cn/github/javaguide/system-design/web-real-time-message-push/1460000042192394.png)
274+
275+
下面是 WebSocket 的常见应用场景:
276+
277+
- 视频弹幕
278+
- 实时消息推送,详见[Web 实时消息推送详解](https://javaguide.cn/system-design/web-real-time-message-push.html)这篇文章
279+
- 实时游戏对战
280+
- 多用户协同编辑
281+
- 社交聊天
282+
- ……
283+
284+
### WebSocket 和 HTTP 有什么区别?
285+
286+
WebSocket 和 HTTP 两者都是基于 TCP 的应用层协议,都可以在网络中传输数据。
287+
288+
下面是二者的主要区别:
289+
290+
- WebSocket 是一种双向实时通信协议,而 HTTP 是一种单向通信协议。并且,HTTP 协议下的通信只能由客户端发起,服务器无法主动通知客户端。
291+
- WebSocket 使用 ws:// 或 wss://(使用 SSL/TLS 加密后的协议,类似于 HTTP 和 HTTPS 的关系) 作为协议前缀,HTTP 使用 http:// 或 https:// 作为协议前缀。
292+
- WebSocket 可以支持扩展,用户可以扩展协议,实现部分自定义的子协议,如支持压缩、加密等。
293+
- WebSocket 通信数据格式比较轻量,用于协议控制的数据包头部相对较小,网络开销小,而 HTTP 通信每次都要携带完整的头部,网络开销较大(HTTP/2.0 使用二进制帧进行数据传输,还支持头部压缩,减少了网络开销)。
294+
295+
### WebSocket 的工作过程是什么样的?
296+
297+
WebSocket 的工作过程可以分为以下几个步骤:
298+
299+
1. 客户端向服务器发送一个 HTTP 请求,请求头中包含 `Upgrade: websocket``Sec-WebSocket-Key` 等字段,表示要求升级协议为 WebSocket;
300+
2. 服务器收到这个请求后,会进行升级协议的操作,如果支持 WebSocket,它将回复一个 HTTP 101 状态码,响应头中包含 ,`Connection: Upgrade``Sec-WebSocket-Accept: xxx` 等字段、表示成功升级到 WebSocket 协议。
301+
3. 客户端和服务器之间建立了一个 WebSocket 连接,可以进行双向的数据传输。数据以帧(frames)的形式进行传送,WebSocket 的每条消息可能会被切分成多个数据帧(最小单位)。发送端会将消息切割成多个帧发送给接收端,接收端接收消息帧,并将关联的帧重新组装成完整的消息。
302+
4. 客户端或服务器可以主动发送一个关闭帧,表示要断开连接。另一方收到后,也会回复一个关闭帧,然后双方关闭 TCP 连接。
303+
304+
另外,建立 WebSocket 连接之后,通过心跳机制来保持 WebSocket 连接的稳定性和活跃性。
305+
263306
## PING
264307

265308
### PING 命令的作用是什么?

docs/system-design/web-real-time-message-push.md

+9
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,15 @@ Websocket 应该是大家都比较熟悉的一种实现消息推送的方式,
302302

303303
![Websocket 示意图](https://oss.javaguide.cn/github/javaguide/system-design/web-real-time-message-push/1460000042192394.png)
304304

305+
WebSocket 的工作过程可以分为以下几个步骤:
306+
307+
1. 客户端向服务器发送一个 HTTP 请求,请求头中包含 `Upgrade: websocket` 和 `Sec-WebSocket-Key` 等字段,表示要求升级协议为 WebSocket;
308+
2. 服务器收到这个请求后,会进行升级协议的操作,如果支持 WebSocket,它将回复一个 HTTP 101 状态码,响应头中包含 ,`Connection: Upgrade`和 `Sec-WebSocket-Accept: xxx` 等字段、表示成功升级到 WebSocket 协议。
309+
3. 客户端和服务器之间建立了一个 WebSocket 连接,可以进行双向的数据传输。数据以帧(frames)的形式进行传送,而不是传统的 HTTP 请求和响应。WebSocket 的每条消息可能会被切分成多个数据帧(最小单位)。发送端会将消息切割成多个帧发送给接收端,接收端接收消息帧,并将关联的帧重新组装成完整的消息。
310+
4. 客户端或服务器可以主动发送一个关闭帧,表示要断开连接。另一方收到后,也会回复一个关闭帧,然后双方关闭 TCP 连接。
311+
312+
另外,建立 WebSocket 连接之后,通过心跳机制来保持 WebSocket 连接的稳定性和活跃性。
313+
305314
SpringBoot 整合 Websocket,先引入 Websocket 相关的工具包,和 SSE 相比额外的开发成本。
306315

307316
```xml

0 commit comments

Comments
 (0)