gpt4 book ai didi

javascript - node中HTTP请求的异步处理

转载 作者:可可西里 更新时间:2023-11-01 16:37:56 26 4
gpt4 key购买 nike

我有一个 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 的函数处理。如果发生错误,则会将其发送给用户。

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

我试过了:

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

如何处理并发请求?

提前致谢。

编辑:

为了清理一些东西,这就是我想要的:

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

编辑 2:

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

编辑 3:

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

最佳答案

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

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

关于javascript - node中HTTP请求的异步处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24527982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com