我有一个node.js项目,其async::queue由App::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()
,与上面相同如何处理并发请求?
提前致谢。
修改
要澄清一些事情,这就是我想要的:
n
编辑2:
我尝试使用cluster module,但这没有多大帮助,因为无论如何我必须结束res
。
编辑3:
我尝试在不关闭的情况下返回流,但也没有成功。 我有点绝望,也许我会把人转发到另一台可以下载文件的服务器。
答案 0 :(得分:1)
NodeJS,就像浏览器中的javascript一样,是单线程的。这意味着它一次只能处理一个连续的代码块。在您的示例中(因为您还没有为队列处理提供代码,我假设传递的函数是实际的处理代码)。由于它没有任何I / O(这意味着它不会阻止外部来源如文件系统或数据库等),因此在nodejs启动之前,函数的逻辑必须完全完成处理另一个事件。
如果您需要更多详细信息,请点击我关于nodejs如何在并发环境中工作的第一个链接:http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/