我很困惑。我试图理解Websockets如何工作,并在node.js和客户端构建服务器。 我无法理解的是,Websocket如何发送数据。 数据库base64是否在从客户端(浏览器)发送之前编码? 二元型'怎么样?工作?仅用于接收?
我是否也必须在服务器上实现这些? 我需要一个二元型'服务器端的选项?
我什么时候需要blob和arraybuffer?取决于小数据和大数据? 如果获取视频和音频文件是什么?
我看了一下如何在网上发送图片,我找到了 通常是解决方案,图片是base64编码并在此之后发送。 但是如果浏览器中的Websocket API已经将二进制文件编码为base64,我就不必这样做了。
对不起,我很困惑,希望有人可以帮助我
答案 0 :(得分:4)
阅读RFC 6455,尤其是5. Data Framing,您可以在那里找到答案。
在WebSocket协议中,使用帧 (而不是base64编码)序列传输数据。 RFC 6455中定义的帧类型如下所示。
体面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/