节点.js:为HTTP代理选择正确的架构,为每个用户下载许多文件,并将结果作为存档返回
Node.js: Choose right architecture for HTTP-proxy to download many files to each user and return result as archive
这更像是架构问题。我需要有人指出我以哪种方式构建流程以实现最佳性能。我是 Node 的新手,所以你需要为我咀嚼答案:)
我想要:Node.js HTTP代理。该代理为我的用户下载文件。
输入数据:
- 我们同时有 10 个用户
- 每个用户要求我们下载 100 个文件(单个请求(
- 每个文件大约是20Mb,并以块的形式提供给我们。
我想要:
- 下载文件并将其发送给用户
- 我想将它们与 Zlib 粘在一起(这意味着实际上我不想压缩它们,我只想让用户获得单个下载结果而不是他的下载文件夹中的 100 个文件(
- 而且我不想在服务器端缓存结果(这意味着我想即时粘贴 gzip 结果并发送给用户。否则我会在服务器上遇到内存问题(。
架构问题: 如何构建流程? 或者如果准确地说:
- 在
- 单个事件循环中完成整个工作,每个任务在单独的工作线程中还是介于两者之间?
- 我应该将 gzip 任务移动到单独的工作人员吗?如果是,是每个用户单独的工作线程还是只是一个普通的 gzip 工作线程?
- 我应该 gzip 并发送给用户什么:文件块、文件或文件集?
- 同步下载/gziping怎么样?意味着我应该和不应该同时做什么?
附言几乎很多问题,但它们都是关于我需要解决的单一任务。您可以回答所有这些问题或只回答一个 - 任何帮助将不胜感激!
好的。如果浏览器请求文件,在这种情况下,您不能只将 100 个文件写入文件夹,因为您无法控制用户的计算机。您唯一能做的就是将一个文件返回给用户,以便响应用户请求。在这种情况下,您唯一能做的就是在服务器端连接文件。但遗憾的是,您也无法立即下载 2Gb 的数据,因此此处的适当算法可以是:
1. 用户文件
请求2.服务器开始逐个或分组并行下载它们,并从外部资源接收数据。服务器为此使用读取流 (http://nodejs.org/api/stream.html(。
3. 服务器打开写入流进行响应。
4.对于每个接收的数据块,服务器标记它属于哪个文件,打包它,并将其发送到可写流中给用户。
注意:生成的文件将是 100 个不同文件的混合块的混乱。客户将需要一些东西来解压缩它。不知不觉地,您可以尝试使用一些打包程序(如gz,zip或tar服务器端(来发送一些对用户有意义的文件(通过一些现有的算法打包不同的文件块并作为流发送给用户(。
一般来说,我建议2Gb很难以任何方式作为单个文件发送。在这种情况下,可以编写客户端应用来执行此操作。https://github.com/rogerwang/node-webkit 模块可以帮助您编写客户端应用程序。
注2:此外,设计集群和请求处理以使用域以避免整个应用程序崩溃也非常重要。因为在节点中很难(有时是不可能的(.js捕获流中引发的错误(根据我的经验,这种情况经常发生(。有关详细信息,请阅读 http://nodejs.org/api/domain.html。
- Chrome扩展程序如何将许多文件保存到用户指定的目录中
- 有没有办法我可以更改 ckEditor 配置,而无需许多几乎相同的配置文件
- 加载许多 svg 文件并更改填充
- Cakephp创建许多缓存文件
- 是否可以包含许多.js文件以使我的代码看起来模块化
- 我可以将许多 rss 源转换为单个 JSON 文件吗?
- 处理包含许多脚本文件的页面
- 节点.js:为HTTP代理选择正确的架构,为每个用户下载许多文件,并将结果作为存档返回
- 使用Addon SDK API下载许多文件时,Firefox UI变得没有响应
- Nodejs在使用Loop下载许多文件时丢失了数据
- 使用实时数据对GeoJSON文件中的许多标记进行样式化
- 在Javascript Windows应用商店中加载许多音频文件
- 使用一个文件可以显示到许多网页
- 正在加载许多javascript文件
- 如何使用javascript播放许多flash(fla)文件
- 我如何使用一个svg文件与许多单独的svg's在html5中
- Javascript ajax与许多参数发送到PHP文件
- 最快的方式来加载许多js文件和变量
- 我想在画布上画一个动画,我是否必须使用许多不同的图片,或者它可以像一个真正的动画(.gif可能)保存在一个文件中
- 使用nodejs读取许多文件的最佳方式