gpt4 book ai didi

javascript - Express 中的并发

转载 作者:搜寻专家 更新时间:2023-11-01 00:34:30 25 4
gpt4 key购买 nike

我想使用可以多线程或多进程请求的 express 设置一个 API。例如,下面是一个在发送响应之前休眠 5 秒的 api。如果我快速调用它 3 次,第一次响应需要 5 秒,第二次需要 10 秒,第三次需要 15 秒,说明请求是按顺序处理的。

我如何构建可以同时处理请求的应用程序。

const express = require('express')
const app = express()
const port = 4000

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

app.get('/', (req, res) => {
sleep(5000).then(()=>{
res.send('Hello World!')
})

})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

编辑:请求 -> 响应

最佳答案

If I call it quickly 3 times, the first response will take 5 seconds, the second will take 10, and the third will take 15, indicating the requests were handled sequentially.

那只是因为您的浏览器正在序列化请求,因为它们都在请求相同的资源。在 Node.js/Express 端,这些请求是相互独立的。如果它们是从三个不同的客户端一个接一个地发送的,它们将在大约 5 秒后(而不是 5、10 和 15 秒后)分别收到响应。

例如,我更新了您的代码以输出响应的日期/时间:

res.send('Hello World! ' + new Date().toISOString())

...然后在三个不同的浏览器中尽可能快地打开 http://localhost:4000 (我似乎没那么快 :-)) 。回复的时间是:

16:15:58.819Z16:16:00.361Z16:16:01.164Z

As you can see, they aren't five seconds apart.

But if I do that in three windows in the same browser, they get serialized:

16:17:13.933Z16:17:18.938Z16:17:23.942Z

If I further update your code so that it's handling three different endpoints:

function handler(req, res) {
sleep(5000).then(()=>{
res.send('Hello World! ' + new Date().toISOString())
})
}

app.get('/a', handler);
app.get('/b', handler);
app.get('/c', handler);

然后即使在同一个浏览器上,对/a/b/c的请求也不会被序列化。

关于javascript - Express 中的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58102508/

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