【发布时间】:2014-08-23 01:25:16
【问题描述】:
我有一个 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-callback 的末尾,它被立即调用,但下一个请求只在第一个结束后处理。 -
console.log在App::add()开头,同上
如何处理并发请求?
提前致谢。
编辑:
为了澄清一些事情,这就是我想要的:
- 许多客户要求该服务下载 zip 文件
- 他们排成一队,
n一次处理 - 完成后,每个人都会得到他们的拉链
编辑 2:
我尝试使用cluster module,但这并没有太大帮助,因为无论如何我都必须结束res。
编辑 3:
我试图在不关闭的情况下返回一个流,但也没有成功。 我有点绝望,也许我会把人们转发到另一个服务器,在那里他们可以下载他们的文件。
【问题讨论】:
-
你可以使用 websockets。在初始请求后加载页面,然后在队列的每个回调中将数据发送到页面。只要确保你没有用队列阻塞事件循环并使用
process.nextTick()。 -
如何返回数据?至于是什么格式。
-
压缩文件或应用程序/JSON 错误。
-
为您的 App.add 函数提供代码
-
App.add() 解析参数并在不到一秒的时间内将项目添加到队列中。
标签: javascript node.js http asynchronous coffeescript