设为首页 收藏本站
 找回密码
 立即注册
查看: 457|回复: 28

[其他更多] 认识websocket协议

[复制链接]

签到天数: 6 天

[LV.2]偶尔看看I

2

主题

0

好友

14

积分

水之精灵LV.1

Rank: 2Rank: 2

回帖
6
雪点
51
阅读权限
10
性别
保密
在线时间
6 小时
注册时间
2021-7-15
最后登录
2024-1-7
发表于 2022-6-19 03:36:35 | 显示全部楼层 |阅读模式
本帖最后由 RommHui 于 2022-7-2 22:56 编辑

首先WebSocket是在TCP上搭建出来的,所以可以保持着一直连接的状态,除非某一方断开连接。
首先我先说说服务端和客户端(多为浏览器)一开始连接,由客户端 js 发起连接请求,HTTP 协议的请求会发出像下面例子这样的一个请求头。


但服务器收到 Upgrade 信息后,如果服务器支持。
那么服务端会读取请求头部的 Sec-WebSocket-Key 的值,并且将 Sec-WebSocket-Key 和 字符串 "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" 通过sha1 摘要算法得到 Sec-WebSocket-Accept 的值,
然后响应头状态码会是 101 Switching Protocols ,下面是一个示例响应头。


到了这里已经把发起请求然后保存连接的过程说完了。接下来就是开始说 WebSocket 协议的结构了。


FIN
大小: 1bit
意思: 当FIN值为 0 的时候代表,消息还没完整,只是其中的一个数据包;当值为 1 的时候代表这段消息已经完全发送了。
RSV 1 / 2 / 3
大小: 1bit
意思: 这个默认为 0 ,如果一定要启用,就得和服务端协商好,才具有意义。
OPCODE
大小: 4bit
意思: 该数据包类型
0 代表数据不完整,这只是其中的一个,不是最后的那个数据包。(Continuation Frame)
1 代表数据包内容的类型为 文本类型(Text Frame)
2 代表数据内容类型为 二进制类型 (Binary Frame)
8 代表连接断开 (Connection Close Frame)
9 和 10 是心跳检测,如果服务端发出 Ping Frame 那么客户端就得发回 Pong Frame ,如果服务端接受不到 Pong Frame 就代表客户端可能已经下线了。
0 - 15 中现在除了这 6 个,都为保留帧。
MASK
大小: 1bit
意思: 掩码使能
1 代表开启
0 代表关闭
Payload len
大小: 7bit(默认)
意思: 内容数据(Payload Data)的长度
Masking-key
大小: 4Byte(默认)
意思: 掩码数据,如果 Mask 为 1 就启用,否则不启用
Payload Data
大小: 0-127Byte(默认,根据Payload len的值决定长度)
意思: 存放数据的地方

PS: 如果Mask为1时,Payload Data 就需要通过 Mask 掩码加密。

签到天数: 62 天

[LV.6]常住居民II

5

主题

0

好友

3458

积分

风之精灵LV.2

鬼仔性格

Rank: 13Rank: 13Rank: 13

回帖
2915
雪点
5080
阅读权限
80
性别
在线时间
111 小时
注册时间
2022-6-3
最后登录
2025-3-30
发表于 2022-6-19 08:11:11 | 显示全部楼层
你想用websocket做啲咩呀
回复 支持 反对

使用道具 举报

签到天数: 3936 天

[LV.Master]伴坛终老

43

主题

9

好友

7万

积分

精灵王☆

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

回帖
70966
雪点
5447
阅读权限
130
在线时间
6518 小时
注册时间
2013-3-22
最后登录
2025-3-31
发表于 2022-6-19 09:58:25 | 显示全部楼层
高深嘅技术
神之影!
回复 支持 反对

使用道具 举报

签到天数: 3630 天

[LV.Master]伴坛终老

12

主题

0

好友

4万

积分

精灵王☆

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

回帖
36375
雪点
52946
阅读权限
130
在线时间
1298 小时
注册时间
2012-10-28
最后登录
2025-3-31
发表于 2022-6-19 13:27:41 | 显示全部楼层
多谢分享websocket协议
回复 支持 反对

使用道具 举报

签到天数: 632 天

[LV.9]以坛为家II

18

主题

0

好友

4万

积分

精灵王☆

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

回帖
44259
雪点
34498
阅读权限
130
性别
保密
在线时间
1330 小时
注册时间
2022-2-16
最后登录
2025-3-8
发表于 2022-6-19 15:54:53 | 显示全部楼层
冇咁既知识睇唔明
回复 支持 反对

使用道具 举报

签到天数: 336 天

[LV.8]以坛为家I

4

主题

0

好友

740

积分

土之精灵LV.2

Rank: 6Rank: 6

回帖
526
雪点
1776
阅读权限
50
在线时间
226 小时
注册时间
2022-3-11
最后登录
2024-8-27
发表于 2022-6-19 16:10:58 | 显示全部楼层
長知識 了 多謝你的分享
回复 支持 反对

使用道具 举报

签到天数: 1085 天

[LV.10]以坛为家III

2

主题

5

好友

2万

积分

炎之精灵LV.3

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

回帖
15453
雪点
47179
阅读权限
120
性别
在线时间
845 小时
注册时间
2021-12-13
最后登录
2025-3-30
发表于 2022-6-19 22:32:48 | 显示全部楼层
看不懂但是感觉有用
回复 支持 反对

使用道具 举报

签到天数: 383 天

[LV.9]以坛为家II

0

主题

1

好友

3362

积分

风之精灵LV.2

Rank: 13Rank: 13Rank: 13

回帖
2360
雪点
9980
阅读权限
80
性别
保密
在线时间
393 小时
注册时间
2022-4-21
最后登录
2025-3-30
发表于 2022-6-19 23:24:06 | 显示全部楼层
好深奥,睇唔明白……
回复 支持 反对

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

2

主题

0

好友

14

积分

水之精灵LV.1

Rank: 2Rank: 2

回帖
6
雪点
51
阅读权限
10
性别
保密
在线时间
6 小时
注册时间
2021-7-15
最后登录
2024-1-7
 楼主| 发表于 2022-6-20 02:28:58 | 显示全部楼层
Ben仔 发表于 2022-6-19 08:11
你想用websocket做啲咩呀

现在web端写客服类的即时通讯都采用websocket
回复 支持 反对

使用道具 举报

签到天数: 62 天

[LV.6]常住居民II

5

主题

0

好友

3458

积分

风之精灵LV.2

鬼仔性格

Rank: 13Rank: 13Rank: 13

回帖
2915
雪点
5080
阅读权限
80
性别
在线时间
111 小时
注册时间
2022-6-3
最后登录
2025-3-30
发表于 2022-6-20 08:04:04 | 显示全部楼层
RommHui 发表于 2022-6-20 02:28
现在web端写客服类的即时通讯都采用websocket

好似好高級喎
回复 支持 反对

使用道具 举报

回帖须知:严禁发表粗言秽语、纯表情、纯数字等无意义内容,更多规则请参阅论坛总版规
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Archiver|粤梦缘

GMT+8, 2025-3-31 12:38 , Processed in 0.028214 second(s), 32 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2023 Comsenz Inc.

快速回复 返回顶部 返回列表