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如下。
- 延续帧(操作码= 0x0)
- 文本框(操作码= 0x1)
- 二进制帧(操作码= 0x2)
- closures帧(操作码= 0x8)
- Ping帧(操作码= 0x9)
- 傍帧(操作码= 0xA)
体面的WebSocket库(客户端和服务器端)可以处理所有这些帧,并提供发送/接收它们的函数/方法。 因此,不必担心数据是如何编码的,无论数据是文本还是二进制(除非您select了错误的WebSocket库)。
请注意,客户端和服务器都可以发送/接收文本帧和二进制帧。
Websockets可以传输文本和二进制数据。 WebSocket二进制数据有两种形状:blob和数组缓冲区。
ws.binaryType = "blob"; // or ws.binaryType = "arraybuffer";
所以你不需要将二进制文本和文本转换为二进制文件进行传输。 你可以直接使用二进制。
你可能提到的问题(例如二进制到base64)是因为很长一段时间浏览器没有和JavaScript结合处理二进制文件,所以你需要绕过文本来绕过这些限制。 这在现代浏览器中有所改进(尽pipe我不知道每个主要浏览器的确切支持)。
有关更多详细信息,请参阅: 使用客户端JavaScript处理二进制协议
关于服务器端,是的,你也需要处理二进制数据。 如果客户端期望二进制服务器应发送二进制。 现在,我并不是所有人都熟悉Node.js,但是一个快速的search可以看出这个看起来很有前景的包: http : //binaryjs.com/