Websocket base64,二进制types

我很困惑。 我想了解Websockets是如何工作的,并在node.js和客户端build立一个服务器。 我无法理解的是,Websocket如何发送数据。 在从客户端(浏览器)发送之前是否将数据base64编码? 'binarytype'如何工作? 只为接收?

我也必须在服务器上实现这些吗? 我需要在服务器端的“二进制types”选项?

我什么时候需要blob和arraybuffer? 取决于小的和大的数据? 什么是如果得到video和audio文件?

我看了一下如何在网上发送图片,而且我常常find解决scheme,图片是base64编码,然后发送。 但是,如果浏览器中的Websocket API已经将二进制文件编码为base64,我不必这样做。

对不起,我很困惑,希望有人能帮助我

阅读RFC 6455 ,特别是5.数据框架 ,你可以在那里find答案。

在WebSocket协议中,数据是使用一系列 (而不是base64编码的) 传输的 。 在RFC 6455中定义的帧types如下。

  1. 延续帧(操作码= 0x0)
  2. 文本框(操作码= 0x1)
  3. 二进制帧(操作码= 0x2)
  4. closures帧(操作码= 0x8)
  5. Ping帧(操作码= 0x9)
  6. 傍帧(操作码= 0xA)

体面的WebSocket库(客户端和服务器端)可以处理所有这些帧,并提供发送/接收它们的函数/方法。 因此,不必担心数据是如何编码的,无论数据是文本还是二进制(除非您select了错误的WebSocket库)。

请注意,客户端和服务器都可以发送/接收文本帧和二进制帧。

Websockets可以传输文本和二进制数据。 WebSocket二进制数据有两种形状:blob和数组缓冲区。

 ws.binaryType = "blob"; // or ws.binaryType = "arraybuffer"; 

所以你不需要将二进制文本和文本转换为二进制文件进行传输。 你可以直接使用二进制。

你可能提到的问题(例如二进制到base64)是因为很长一段时间浏览器没有和JavaScript结合处理二进制文件,所以你需要绕过文本来绕过这些限制。 这在现代浏览器中有所改进(尽pipe我不知道每个主要浏览器的确切支持)。

有关更多详细信息,请参阅: 使用客户端JavaScript处理二进制协议

关于服务器端,是的,你也需要处理二进制数据。 如果客户端期望二进制服务器应发送二进制。 现在,我并不是所有人都熟悉Node.js,但是一个快速的search可以看出这个看起来很有前景的包: http : //binaryjs.com/