You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS Express使用async/await时无法并发处理请求问题问询

问题根因

你观测到的串行现象和Express、async/await、NodeJS的非阻塞特性完全无关,是主流浏览器的同请求排队策略导致的:对于完全相同的GET请求(同URL、同请求头、无差异化参数),浏览器会主动将第二个请求加入等待队列,直到前一个请求拿到响应后,才会真正发出第二个请求,你的服务端从始至终都没有在同一时间收到两个请求,自然不会打印并行日志。

验证方法

你可以用两种方式验证NodeJS的非阻塞特性是正常生效的:

  • 给两个请求加不同的随机查询参数,比如第一个标签页访问http://你的服务地址/?q=1,第二个访问http://你的服务地址/?q=2,就能看到两个请求的接收日志几乎同时打印,10秒后也会几乎同时返回结果,符合并行处理的预期。
  • 不用浏览器测试,打开两个终端窗口,分别执行curl http://你的服务地址发起请求,同样可以观测到并行处理的效果。

补充说明

  1. 你的代码写法本身没有问题,不需要额外配置Express,async/await的使用也是正确的。NodeJS的单线程非阻塞特性指的就是主线程不会傻等定时器、数据库查询、网络请求这类IO操作完成,会先去处理其他进来的请求,符合你测试的预期。
  2. 注意代码里的全局变量i是所有请求共享的,并行请求会同时修改它的值,实际业务中不要用全局变量存储请求级别的状态,避免数据污染。

内容的提问来源于stack exchange,提问作者SnoopyMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 08:36:05