`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