认识websocket协议
本帖最后由 RommHui 于 2022-7-2 22:56 编辑首先WebSocket是在TCP上搭建出来的,所以可以保持着一直连接的状态,除非某一方断开连接。首先我先说说服务端和客户端(多为浏览器)一开始连接,由客户端 js 发起连接请求,HTTP 协议的请求会发出像下面例子这样的一个请求头。
https://tansoz.github.io/c02a7c494f9f9ffeb262335c409e3c556d93a8b1937f9d979824b5305212a60b.png
但服务器收到 Upgrade 信息后,如果服务器支持。那么服务端会读取请求头部的 Sec-WebSocket-Key 的值,并且将 Sec-WebSocket-Key 和 字符串 "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" 通过sha1 摘要算法得到 Sec-WebSocket-Accept 的值,然后响应头状态码会是 101 Switching Protocols ,下面是一个示例响应头。
https://tansoz.github.io/2d3f70f0ef757ba8214b57df8cc39b8eea414d4ccf8e3167ae7db1d5a524c13e.png
到了这里已经把发起请求然后保存连接的过程说完了。接下来就是开始说 WebSocket 协议的结构了。
https://tansoz.github.io/63eed144fa14cb017ed9717be64a5c3482aa3c683b5fa5c1c8485ec010a314c4.jpg
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 掩码加密。
你想用websocket做啲咩呀https://www.dranime.net//mobcent//app/data/phiz/default/31.png
高深嘅技术 多谢分享websocket协议 冇咁既知识睇唔明 長知識 了 多謝你的分享 看不懂但是感觉有用 好深奥,睇唔明白……
Ben仔 发表于 2022-6-19 08:11
你想用websocket做啲咩呀
现在web端写客服类的即时通讯都采用websocket RommHui 发表于 2022-6-20 02:28 static/image/common/back.gif
现在web端写客服类的即时通讯都采用websocket
好似好高級喎