gpt4 book ai didi

javascript - Node.js:为 HTTP 代理选择正确的架构,以将许多文件下载给每个用户并将结果作为存档返回

转载 作者:行者123 更新时间:2023-12-03 11:18:23 25 4
gpt4 key购买 nike

这是更多的架构问题。我需要有人指出我如何构建流程以实现最佳性能。我是 Node 的新手,所以你需要为我咀嚼答案:)

我想要: Node.js HTTP 代理。该代理为我的用户下载文件。

输入数据:

  1. 我们同时有 10 个用户
  2. 每个用户要求我们下载 100 个文件(在单个请求中)
  3. 每个文件大约 20Mb,并以 block 的形式发送给我们。

我想要:

  1. 下载文件并将其发送给用户
  2. 我想将它们与 Zlib 粘在一起(意味着实际上我不想压缩它们,我只想用户获得单个下载结果而不是下载文件夹中的 100 个文件)
  3. 我不想在服务器端缓存结果(意味着我想即时粘贴 gzip 结果并发送给用户。否则我会在服务器上遇到内存问题)

架构问题: 如何构建流程?或者准确地说:

  1. 在单个事件循环中完成所有工作,每个任务在单独的工作线程中完成,还是介于两者之间?
  2. 我应该将 gziping 任务移至单独的工作线程吗?如果是,为每个用户单独的工作人员还是只是一个通用的 gziping 工作人员?
  3. 我应该压缩什么内容并将其发送给用户:文件 block 、文件还是文件集?
  4. 同时下载/gziping 怎么样?意味着我应该做什么和不应该同时做什么?

P.S. 几乎有很多问题,但它们都与我需要解决的单个任务有关。您可以回答所有问题,也可以只回答特定的一个问题 - 如有任何帮助,我们将不胜感激!

最佳答案

好的。如果浏览器请求文件,在这种情况下,您不能只将 100 个文件写入文件夹,因为您无法控制用户的计算机。您唯一能做的就是将一个文件返回给用户以响应用户请求。在这种情况下,您唯一能做的就是在服务器端连接文件。但显然你也无法立即下载 2Gb 的数据,所以这里合适的算法可以是:
1. 用户请求文件
2. 服务器开始逐一或分组并行下载,并从外部资源接收数据。服务器为此使用读取流( http://nodejs.org/api/stream.html )。
3. 服务器打开写入流以进行响应。
4. 对于每个接收到的数据 block ,服务器标记它属于哪个文件,将其打包,并将其发送给用户可写流。

注意:生成的文件将是 100 个不同文件的混合 block 。客户需要一些东西来打开它的包装。显然,您可以尝试使用 gz、zip 或 tar 服务器端等打包程序来发送一些对用户有意义的文件(通过某些现有算法打包不同的文件 block 并作为流发送给用户)。

一般来说,我建议 2Gb 无论如何都很难作为单个文件发送。在这种情况下可以编写客户端应用程序来执行此操作。有https://github.com/rogerwang/node-webkit可以帮助您编写客户端应用程序的模块。

注2:此外,设计集群和请求处理以与域一起使用以避免整个应用程序崩溃也非常重要。因为在 Node.js 中很难(有时不可能)捕获流中引发的错误(根据我的经验,这种情况经常发生)。阅读 http://nodejs.org/api/domain.html了解更多信息。

关于javascript - Node.js:为 HTTP 代理选择正确的架构,以将许多文件下载给每个用户并将结果作为存档返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27230930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com