节点中HTTP请求的异步处理

时间:2014-07-02 09:49:51

标签: javascript node.js http asynchronous coffeescript

我有一个node.js项目,其async::queueApp::add()填充。

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

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获取参数,并使用回调将任务添加到队列中。 使用结束end的函数处理队列。如果发生错误,则会将错误发送给用户。

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

我试过了:

  • console.log - 回调结束时的http.createServer,它立即被调用,但下一个请求仅在第一次结束后处理。
  • console.log开头App::add(),与上面相同

如何处理并发请求?

提前致谢。

修改

要澄清一些事情,这就是我想要的:

  1. 许多客户要求服务下载zip
  2. 他们排成队列,一次处理n
  3. 每个人一旦完成就会得到他们的拉链
  4. 编辑2:

    我尝试使用cluster module,但这没有多大帮助,因为无论如何我必须结束res

    编辑3:

    我尝试在不关闭的情况下返回流,但也没有成功。 我有点绝望,也许我会把人转发到另一台可以下载文件的服务器。

1 个答案:

答案 0 :(得分:1)

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

如果您需要更多详细信息,请点击我关于nodejs如何在并发环境中工作的第一个链接:http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/