gul*_*uly 0 websocket socket.io
假设我正在创建一个websocket客户端.并且特定的websocket url将框架返回为"二进制框架(操作码2)".问题是
1.为什么开发人员想要将原始消息包装在二进制操作码框架内?
2.检索以实现为中心的消息吗?换句话说,客户端是否必须知道用于在服务器上编码的相同逻辑?
3.如果上述内容为false,那么是否存在解码/解析二进制操作码以查看正在发送的实际数据的全局方法?
Websocket框架基本上如下所示:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
FIN
FIN位告诉您这是否是您将收到的所有数据.大型Websocket消息可以分段(通过多个帧发送)RSV1-3
opcode
Pong和Ping数据进行响应以验证其可达性MASK
MASK位置位时才存在FIN位置位,则不是整个有效负载MASK设置了位,则需要屏蔽有效负载FIN一点
&它与127,结果是你的FIN位OpCode(OpCode告诉你你有什么类型的框架)
&它与15,结果是你的opcodeMASK一点
&然后使用127,如果是127则获得屏蔽密钥MASK设置该位,则需要屏蔽有效负载
xor在索引计数模4上使用屏蔽键对每个字节进行操作int count = 0;
for (int i = dataIndex; i < totalLength; i++)
{
frameData[i] = (byte)(frameData[i] ^ key[count % 4]);
count++;
}