asynchronous处理节点中的HTTP请求

我有一个node.js项目,它有一个由App::add()填充的async ::队列 。

这是我用来创build服务器的代码:

 app = new App config server = http.createServer (req, res) -> app.add req, res, (err) -> res.headers = 'Content-Type': 'application/json' res.end JSON.stringify error: err .listen config.port 

App::add()req获取参数,并使用callbackreq将任务添加到队列中。 队列处理结束的function。 如果发生错误,则会发给用户。

到目前为止工作良好。 但是当并行执行多个请求时,只处理一个请求。

我试过了:

  • http.createServer末尾的console.log被立即调用,但下一个请求只在第一个结束后处理。
  • App::add()开头的一个console.log ,和上面一样

我如何处理并发请求?

提前致谢。

编辑:

为了清除一些事情,这是我想要的:

  1. 许多许多客户请求服务下载一个zip文件
  2. 他们排成队列,每次处理n
  3. 一旦完成,每个人都会得到他们的邮政编码

编辑2:

我试图使用集群模块 ,但这并没有什么帮助,因为我必须结束res

编辑3:

我试图返回一个stream而不closures,但也没有成功。 我有点绝望,也许我只是转发人到另一台服务器,他们可以下载他们的文件。

NodeJS,就像浏览器中的javascript,是单线程的。 这意味着它一次只能处理一个连续的代码块。 在你的例子中(因为你没有为你的队列处理提供代码,所以我认为传递的函数是实际的处理代码)。 由于它没有任何I / O(这意味着它不会阻塞从外部来源如文件系统或数据库等),所以在nodejs可以开始处理另一个事件之前,函数的逻辑必须完全完成。

如果你需要更多的细节,下面是关于nodejs如何在并发环境中工作的第一个链接: http ://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/