`WebSocket可以发送文本,也可发送二进制`是什么意思?

WebSocket可以发送文本,也可发送二进制。

这里是针对应用层说的对吗?也就是说,在使用传输的时候,文本不用被转为二进制再使用websocket传输。视频,音频,图片需要被转换成二进制再传输对吗?
那么带有图片的.doc文档呢?


回答:

这里是针对应用层说的对吗?

既是针对协议层,也是针对应用层,协议是定义给应用的,应用需要理解协议内容。

对于应用层来说,所有的数据都是二进制,你要通过固定的协议来通知应用层读取这个数据的方式,是使用文本方式读取,还是使用二进制方式读取。

也就是说,在使用传输的时候,文本不用被转为二进制再使用websocket传输

数据传输全是二进制,理解这个概念很重要。

视频,音频,图片需要被转换成二进制再传输对吗?
那么带有图片的.doc文档呢?

是的,只要是文本无法表达的数据,都应该使用二进制。

一些必要的知识

数据传输全是二进制

你首先要理解这句话,对于机器来说,一切的数据都是二进制,数据是什么格式的,取决于我们是怎么读取他的。

例如,一段 utf-8 的文本,你可以用 utf-8 的方式读,但也能通过 gbk 的方式读,只不过读取的是乱码,这个文件是 utf-8 还是 gbk,你需要提前知道,也是就约定好。

如果你真的深刻的理解了这个道理,那么你提的问题都不再是问题,很少会有被乱码困扰的情况,对技术的理解将会上升。

你就比如我来说,我本来是不了解 websocket 的协议的,但是我清楚,数据的传输没有文本或是二进制之分的,一定是有一个地方去标识的,否则应用层无法理解数据,于是我就按照这个想法去找答案,于是就有了下面的内容。

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 ... |

+---------------------------------------------------------------+

Opcode: 4 bits

Defines the interpretation of the "Payload data". If an unknown

opcode is received, the receiving endpoint MUST _Fail the

WebSocket Connection_. The following values are defined.

* %x0 denotes a continuation frame

* %x1 denotes a text frame

* %x2 denotes a binary frame

* %x3-7 are reserved for further non-control frames

* %x8 denotes a connection close

* %x9 denotes a ping

* %xA denotes a pong

* %xB-F are reserved for further control frames

主要看 Opcode

如果值为 %x1,那么就是告诉应用,你需要以文本的方式读取该帧数据。

如果值为 %x2,那么就是告诉应用,你需要以二进制的方式读取该帧数据。

到这里,已经说的很清楚了。


回答:

支持了 blob 和 arraybuffer 等类型。https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket/send


也可以看 caniuse 中,某些版本支持 string,

以上是 `WebSocket可以发送文本,也可发送二进制`是什么意思? 的全部内容, 来源链接: utcz.com/p/945026.html

回到顶部