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
,和上面一样
我如何处理并发请求?
提前致谢。
编辑:
为了清除一些事情,这是我想要的:
- 许多许多客户请求服务下载一个zip文件
- 他们排成队列,每次处理
n
个 - 一旦完成,每个人都会得到他们的邮政编码
编辑2:
我试图使用集群模块 ,但这并没有什么帮助,因为我必须结束res
。
编辑3:
我试图返回一个stream而不closures,但也没有成功。 我有点绝望,也许我只是转发人到另一台服务器,他们可以下载他们的文件。
NodeJS,就像浏览器中的javascript,是单线程的。 这意味着它一次只能处理一个连续的代码块。 在你的例子中(因为你没有为你的队列处理提供代码,所以我认为传递的函数是实际的处理代码)。 由于它没有任何I / O(这意味着它不会阻塞从外部来源如文件系统或数据库等),所以在nodejs可以开始处理另一个事件之前,函数的逻辑必须完全完成。
如果你需要更多的细节,下面是关于nodejs如何在并发环境中工作的第一个链接: http ://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/