RFC 6455中的文本帧(操作码 = 0x01)和二进制帧(操作码 = 0x02)。它们之间有什么不同,哪一个更快?
sne*_*mer 10
对于某些背景以及可能对其他领域更熟悉的人来说,HTTP/1 依赖于非结构化明文协议,而 HTTP/2 允许通过二进制帧更快地处理消息。此外,SMTP 依赖于文本,而 TCP 依赖于二进制协议。总而言之,文本依赖于 ASCII(“Hello”),而二进制虽然是一个令人困惑的术语,但没有可读的表示形式。在 JavaScript 中,socket.send(new ArrayBuffer(8))是一种基本的二进制对象,也是可发送格式的一个示例。这会分配 8 字节的连续内存区域并预先用零填充。
希望这提供了一些好的背景。
0x01是十六进制数(用0x整数 1 表示)是 4 位操作码,供接收方(客户端或服务器)知道它将接收什么类型的“帧”。UTF-8 用 表示0x01,原始二进制文件用 表示0x02。
原始二进制文件会快得多。想象一下这样的架构:
0x01如果我们通过 Websocket发送文本数据(操作码),它必须在代理处翻译接收到的数据。在 TCP 服务器响应客户端消息之前,它可能必须将响应转换为文本数据。通过 base64 将二进制数据编码为 ASCII 文本将使消息的大小增加 20-30%。
使用操作码0x02,我们可以在整个请求/响应周期中跳过 2 个步骤,并减少我们传递的消息的大小。简而言之,我们跳过解释。此外,Websocket 规范有 UTF-8 验证规则。文本和二进制之间的差异可能是二进制的 2 倍。
| 归档时间: |
|
| 查看次数: |
3900 次 |
| 最近记录: |