"文本框架和#34;之间的区别是什么?和#34;二进制框架"在Websocket?

时间:2016-12-21 09:37:05

标签: websocket

RFC 6455中的文本框架(操作码= 0x01)和二进制框架(操作码= 0x02)。他们之间有什么不同,哪一个更快?

1 个答案:

答案 0 :(得分:1)

对于某些背景,或者在其他领域可能更熟悉,HTTP / 1依赖于非结构化纯文本协议,而HTTP / 2则允许通过二进制框架更快地处理消息。此外,SMTP依赖于文本,而TCP依赖于二进制协议。综上所述,文本依赖于ASCII('Hello'),而二进制虽然是一个令人困惑的术语,但却没有可读的表示形式。在JavaScript中,socket.send(new ArrayBuffer(8))是基本的二进制对象,并且是可以发送的格式的一个示例。这将分配一个8字节的连续内存区域,并用零预填充它。

希望这提供了一些良好的环境。

0x01是十六进制数(用0x表示,代表整数1)是接收者(客户端或服务器)知道它将接收哪种类型的“帧”的4位操作码。 UTF-8用0x01表示,原始二进制用0x02表示。

原始二进制文件将更快。想象一下这样的架构:

Request Response Architecture

如果我们通过Websocket发送文本数据(操作码0x01),则它必须在代理处转换收到的数据。在TCP服务器响应客户端消息之前,它可能必须将响应转换为文本数据。通过base64将二进制数据编码为ASCII文本将使消息的大小增加20-30%。

使用0x02的操作码,我们可以在整个请求/响应周期中跳过2个步骤,并减小传递的消息的大小。简而言之,我们跳过解释。此外,Websocket规范具有UTF-8验证规则。文本和二进制之间的差异可能是二进制的2倍。