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

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

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

阅读 2.4k
2 个回答
这里是针对应用层说的对吗?

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

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

也就是说,在使用传输的时候,文本不用被转为二进制再使用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,那么就是告诉应用,你需要以二进制的方式读取该帧数据。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题