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

时间:2016-09-04 17:34:34

标签: node.js socket.io streaming

许多教程直接通过socket.io教授上传文件,但我发现socket.io-stream可以做同样的事情

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

1 个答案:

答案 0 :(得分:1)

使用流媒体有很多原因:

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

  2. Streaming执行自动流量控制和缓冲管理。这样即使在流式传输大型对象时,也可以将内存管理保持为托管值。

  3. Streaming提供了一个标准界面,可以轻松地挂钩其他代码(如变换,其他存储介质等)。

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

  5. 是否使用流式传输实际上是个案的基础。如果您知道流媒体并且您只是尝试将文件从A点发送到B点,我几乎总是使用流式传输,除非有一些特定的原因没有(某些功能之后您更难以实现流式传输) )。

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

      

    使用socket.io-stream将文件上传到服务器有什么好处?

    见上文。

      

    如果文件大小很小(约300kb),我是否需要流式传输?

    “需要流式传输”取决于很多事情。在300kb并且不可能同时在飞行中有数千个,你可能不需要“流”。但我会反过来问自己一个问题。为什么不流呢?如果您有现成的代码,为什么不使用它呢?

      

    流媒体会节省服务器的内存吗?

    这取决于你要比较它的实现,但由于流有控制流和自我管理缓冲,因此在使用内存时效率通常很高。

      

    如果我使用base64编码通过websocket上传一些文件(~8mb),它会以不好的方式影响服务器吗?

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