在 socket.io 和 socket.io 流之间上传文件

upload file between socket.io and socket.io stream

很多教程都教直接通过socket.io上传文件,但我发现socket.io-stream也可以做到这一点

  1. 使用socket.io-stream上传文件的优势是什么 服务器?
  2. 如果文件很小(~300kb),我需要串流吗?
  3. 流媒体会节省服务器内存吗?
  4. 如果我上传一些文件 (~8mb) 通过使用base64编码的websocket,它会影响服务器吗 以一种糟糕的方式?

非常感谢

使用流媒体的原因有很多:

  1. 它包含许多预先打包的、已经过测试的功能,这些功能通常是实现某些数据传输功能的最简单、最可靠的方法。

  2. Streaming 进行自动流量控制和缓冲区管理。这使内存管理保持在托管值,即使在流式传输大型对象时也是如此。

  3. Streaming 提供了一个标准接口,可以轻松挂钩其他代码(如转换、其他存储介质等...)。

  4. 已经内置了很多错误处理。

是否使用流式传输实际上是根据具体情况而定。如果你知道流媒体并且你只是想将文件从 A 点发送到 B 点,我几乎总是使用流媒体,除非有一些特定的原因不这样做(你想要的一些功能很难通过流媒体实现).

您没有展示您的非流式代码如何工作,因此我们很难将流式选项直接与您未展示的代码进行比较,但这里是对您的具体问题的猜测:

what is the advantage of using socket.io-stream to upload file to server?

参见以上几点。

If the file size is small(~300kb), do I need to stream it?

"Need to stream it" 取决于很多事情。在 300kb 的情况下,不可能同时播放数千个这样的视频,您可能不会 "need" 进行流式传输。但我会反过来问自己一个问题。为什么不流式传输呢?如果您有现成的代码,为什么不使用它呢?

Will streaming save memory of server?

这取决于您将其与哪种实现进行比较,但由于流式传输具有流量控制并自行管理缓冲,因此它通常可以高效地使用内存。

If I upload some files (~8mb) through websocket using base64 encoding, will it impact the server in a bad way?

这完全取决于您的实施。我不会说 webSocket 是专门为优化文件上传而构建的。在大多数情况下,我可能会使用 webSocket 作为控制通道并通过 http 服务器上传大文件,其中上传是一项成熟的功能。对于初学者来说,base64 编码对于某些类型的数据并不是特别有效。 http 和 webSocket 都支持二进制传输,这通常对文件数据更有效。