Websocket base64,二进制类型

Websocket base64, binarytype

我很困惑。我试图了解 Websockets 是如何工作的,并在 node.js 和客户端中构建了一个服务器。 我无法理解的是,Websocket 如何发送数据。 在从客户端(浏览器)发送之前是否对数据库进行了 base64 编码? 'binarytype' 是如何工作的?仅用于接收 ?

我是否也必须在服务器上实现这些? 服务器端是否需要 'binarytype' 选项?

我什么时候需要 blob 和 arraybuffer ?取决于小数据和大数据? if get 获取视频和音频文件是什么?

我看了看如何在网络上发送图片,我发现 通常的解决方案是,图片经过 base64 编码,然后发送。 但是如果浏览器中的 Websocket API 已经将二进制文件编码为 base64,我就不必这样做了..

抱歉,我很困惑,希望有人能帮助我

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

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

因此您不需要将二进制转换为文本和将文本转换为二进制来进行传输。可以直接使用二进制。

您可能提到的问题(例如二进制到 base64)是由于长期以来浏览器无法很好地处理与 JavaScript 结合的二进制文件,因此您需要随机排列文本相反,绕过限制。这在现代浏览器中有所改进(虽然我不知道每个主要浏览器的确切支持)。

查看此内容了解更多详情:Processing Binary Protocols with Client-Side JavaScript

关于服务器端,是的,您还需要处理二进制数据。如果客户端期望二进制文件,则服务器应发送二进制文件。现在,我对 Node.js 不是很熟悉,但快速搜索发现这个看起来很有前途的包:http://binaryjs.com/

阅读 RFC 6455, especially 5. Data Framing,您可以在那里找到答案。

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

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

体面的 WebSocket 库(包括客户端和服务器端)可以处理所有这些帧并提供 functions/methods 到 send/receive 它们。因此,无论数据是文本还是二进制,您都不必担心数据的编码方式(除非您选择了一个糟糕的 WebSocket 库)。

请注意,客户端和服务器都可以 send/receive 文本框架和二进制框架。