WebSocket可以发送文本,也可发送二进制。
这里是针对应用层说的对吗?也就是说,在使用传输的时候,文本不用被转为二进制再使用websocket传输。视频,音频,图片需要被转换成二进制再传输对吗?
那么带有图片的.doc文档呢?
WebSocket可以发送文本,也可发送二进制。
这里是针对应用层说的对吗?也就是说,在使用传输的时候,文本不用被转为二进制再使用websocket传输。视频,音频,图片需要被转换成二进制再传输对吗?
那么带有图片的.doc文档呢?
支持了 blob 和 arraybuffer 等类型。https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket/send
也可以看 caniuse 中,某些版本支持 string,
15 回答8.4k 阅读
8 回答6.2k 阅读
3 回答2.3k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
既是针对协议层,也是针对应用层,协议是定义给应用的,应用需要理解协议内容。
对于应用层来说,所有的数据都是二进制,你要通过固定的协议来通知应用层读取这个数据的方式,是使用文本方式读取,还是使用二进制方式读取。
数据传输全是二进制,理解这个概念很重要。
是的,只要是文本无法表达的数据,都应该使用二进制。
一些必要的知识
你首先要理解这句话,对于机器来说,一切的数据都是二进制,数据是什么格式的,取决于我们是怎么读取他的。
例如,一段 utf-8 的文本,你可以用 utf-8 的方式读,但也能通过 gbk 的方式读,只不过读取的是乱码,这个文件是 utf-8 还是 gbk,你需要提前知道,也是就约定好。
如果你真的深刻的理解了这个道理,那么你提的问题都不再是问题,很少会有被乱码困扰的情况,对技术的理解将会上升。
你就比如我来说,我本来是不了解 websocket 的协议的,但是我清楚,数据的传输没有文本或是二进制之分的,一定是有一个地方去标识的,否则应用层无法理解数据,于是我就按照这个想法去找答案,于是就有了下面的内容。
在官方文档有描述。
主要看
Opcode
。如果值为
%x1
,那么就是告诉应用,你需要以文本的方式读取该帧数据。如果值为
%x2
,那么就是告诉应用,你需要以二进制的方式读取该帧数据。到这里,已经说的很清楚了。