Websocket base64,binarytype

时间:2015-07-03 20:31:59

标签: javascript node.js networking websocket network-programming

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

我是否也必须在服务器上实现这些? 我需要一个二元型'服务器端的选项?

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

  1. Continuation Frame(操作码= 0x0)
  2. 文字框架(操作码= 0x1)
  3. 二进制帧(操作码= 0x2)
  4. 关闭帧(操作码= 0x8)
  5. Ping Frame(操作码= 0x9)
  6. Pong Frame(操作码= 0xA)
  7. 体面WebSocket库(客户端和服务器端)可以处理所有这些帧,并提供发送/接收它们的功能/方法。因此,无论数据是文本还是二进制(除非您选择错误的WebSocket库),您都不必担心数据的编码方式。

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

答案 1 :(得分:1)

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

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

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

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

详细了解详情:Processing Binary Protocols with Client-Side JavaScript

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

相关问题