returns promise 对 hapijs(v20) 处理程序的并发请求
Concurrent request to hapijs(v20) handler which returns promise
我有一个 API 是使用 HapiJS 框架开发的。如果处理程序 returns 承诺,则后续请求将等待完成现有请求。所以基本上我在点击 API.
时执行了一个异步过程
请查找以下示例:
// Server Creation ...
// Route Creation
server.route({
method: 'GET',
path: '/v1/check',
handler: () => {
console.log('Check');
return new Promise((resolve) => {
setTimeout(() => {
console.log('Check Response')
resolve({check: 1});
}, 1000);
});
}
});
同时在浏览器的 3 个不同选项卡中执行相同的路由并同时重新加载。
日志:
Check
Check Response
Check
Check Response
Check
Check Response
预期日志:
Check
Check
Check
Check Response
Check Response
Check Response
// Not expecting the same log, but wanted parallel execution.
所以我怀疑如果 100 个用户点击同一个 API 那么第 100 个请求必须等待 99 个请求完成?
对输出有点困惑。
使用浏览器进行测试可能并不理想,因为它们通常对允许的并发连接数有上限。
当我 运行 使用 Apache Bench 的示例时,我得到了预期的结果。
服务器:
'use strict';
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
server.route({
method: 'GET',
path: '/v1/check',
handler: () => {
console.log('Check');
return new Promise((resolve) => {
setTimeout(() => {
console.log('Check Response')
resolve({check: 1});
}, 1000);
});
}
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
init();
测试:
docker run -it --net="host" --rm -t devth/alpine-bench -n10 -c10 http://host.docker.internal:3000/v1/check
结果:
$ node index.js
Server running on http://localhost:3000
Check
Check
Check
Check
Check
Check
Check
Check
Check
Check
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response
我有一个 API 是使用 HapiJS 框架开发的。如果处理程序 returns 承诺,则后续请求将等待完成现有请求。所以基本上我在点击 API.
时执行了一个异步过程请查找以下示例:
// Server Creation ...
// Route Creation
server.route({
method: 'GET',
path: '/v1/check',
handler: () => {
console.log('Check');
return new Promise((resolve) => {
setTimeout(() => {
console.log('Check Response')
resolve({check: 1});
}, 1000);
});
}
});
同时在浏览器的 3 个不同选项卡中执行相同的路由并同时重新加载。
日志:
Check
Check Response
Check
Check Response
Check
Check Response
预期日志:
Check
Check
Check
Check Response
Check Response
Check Response
// Not expecting the same log, but wanted parallel execution.
所以我怀疑如果 100 个用户点击同一个 API 那么第 100 个请求必须等待 99 个请求完成?
对输出有点困惑。
使用浏览器进行测试可能并不理想,因为它们通常对允许的并发连接数有上限。
当我 运行 使用 Apache Bench 的示例时,我得到了预期的结果。
服务器:
'use strict';
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
server.route({
method: 'GET',
path: '/v1/check',
handler: () => {
console.log('Check');
return new Promise((resolve) => {
setTimeout(() => {
console.log('Check Response')
resolve({check: 1});
}, 1000);
});
}
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
init();
测试:
docker run -it --net="host" --rm -t devth/alpine-bench -n10 -c10 http://host.docker.internal:3000/v1/check
结果:
$ node index.js
Server running on http://localhost:3000
Check
Check
Check
Check
Check
Check
Check
Check
Check
Check
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response
Check Response