WebSocket
Web SOCKET
websocket 介绍
web socket 是一种全双工通讯的网络技术,属于应用层协议,基于 TCP 传输协议,并复用了 HTTP 的握手通道
是一种长连接,不需要频繁的链接断开
websocket 数据帧格式
单位是 bit 如 FIN RSV 都占据 1bit opcode 占据 4bit
FIN 1BIT 标记数据是否发送到最后一位
如果是消息的最后一个分片,则返回的是 1 否则返回 0
OPCODE 4BIT
==9 10 用于心跳监测==
MASK(掩码)
- 客户端发送消息到服务端 掩码为 1
- 服务端发送消息到客户端 掩码为 0
PAYLOAD(数据载荷长度)
说明传输的数据的字节 根据 Payload length 的长度 判断后续字节的作用
Buffer
字节数组大端序:高位放在低地址先读,按顺序读取
小端序:
输出为 256 1
Masking-Key
0 或 4 字节(32 位)所有从客户端传送到服务端的数据帧,数据载荷都进行了掩
码操作,Mask 为 1,且携带了 4 字节的 Masking-key。如果 Mask 为 0,则没有 Masking-key。
载荷数的长度,不包括 mask key 的长度
websocket 建立链接过程
客户端请求头及请求相应状态:
服务端响应
其中请求中的Sec-Websocket-Key
用于验证链接是否合法
状态码中的 101 代表协议切换
客户端发送消息到客户端
代码
客户端代码
1 |
|
服务端代码
1 | const { Server } = require("ws"); |
流程
let soket = new WebSocket("ws://localhost:8889")
浏览器链接服务器soket.send("hello server");
客户端向服务器发消息 “hello server”socket.on("message"
)服务端监听到消息并触发回调,向客户端发送消息soket.onmessage
客户端监听到服务端的相应,触发回调打印
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 !