使用 node.js 运行许多并行 http 请求
Posted
技术标签:
【中文标题】使用 node.js 运行许多并行 http 请求【英文标题】:running many parallel http requests using node.js 【发布时间】:2011-08-06 03:43:21 【问题描述】:我的任务是将一个进程拆分为多个并行运行的较小进程,然后分布到多个从属机器上。请求通过 HTTP 进入,服务器将其拆分为多个子进程发给从机,等待所有从机请求返回响应,然后将聚合结果整理成单个数据对象,作为顶层请求。我认为 node.js 会很有用,但由于它是单线程的,我不能完全确定这是否可能,或者它是否会阻止等待每个请求返回,然后再继续下一个请求。这对 node.js 可行吗?如果是这样,有人可以指出我正确的方向吗?即一个节点模块来使用或概述它是如何完成的?
感谢您的帮助。
【问题讨论】:
【参考方案1】:你可以生成child processes 手动。
var util = require('util'),
spawn = require('child_process').spawn,
node = spawn('node', ['slave.js']);
node.stdout.on('data', function (data)
console.log('stdout: ' + data);
);
node.stderr.on('data', function (data)
console.log('stderr: ' + data);
);
node.on('exit', function (code)
console.log('child process exited with code ' + code);
);
node.stdin.write("do my work!");
我们预计将实现一个 Web Worker API 来处理更高抽象的子进程
【讨论】:
【参考方案2】:您想了解 WebWorkers。具体来说,你应该阅读http://developer.yahoo.com/blogs/ydn/posts/2010/07/multicore_http_server_with_nodejs/
【讨论】:
【参考方案3】:尝试查看 node.js cluster 模块,它是一个多核服务器管理器。
【讨论】:
【参考方案4】:如果即使是单个较小的进程有一个同步接口,单线程也是一个问题。
幸运的是 node 是围绕异步接口设计的。
如子进程http://nodejs.org/docs/v0.4.6/api/child_processes.html#child_process.exec
或 http 请求 http://nodejs.org/docs/v0.4.6/api/http.html#http.request
【讨论】:
在节点的 Http.request 文档中,它说:“节点为每个服务器维护多个连接以发出 HTTP 请求。”。我对此的理解是,我可以在 for 循环中发出 http 请求,跟踪所有返回的结果,然后在它们全部返回时调用我的回调。但是,这种方法似乎取决于该句子中所述节点保持打开的连接数,这意味着它将并行化该过程,直到我达到池中可用请求的数量为止。有谁知道我怎样才能将这个数字增加到 100?【参考方案5】:我认为这篇博文在异步如何帮助并行执行以及如何使用 Node 进行并行执行方面可能很有趣。
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
【讨论】:
以上是关于使用 node.js 运行许多并行 http 请求的主要内容,如果未能解决你的问题,请参考以下文章