node.js - Nodejs 中的并发
问题描述
我有如下节点服务器。我几乎同时推送 2 个请求(使用相同的 url =“localhost:8080/”)。我的问题是:“为什么服务器等待第一个请求处理完成,然后处理第二个请求”?
- 我的测试控制台中的输出:
家.. 家..
(注意:第 2 行将在 12 秒后显示)- server.js:
var express = require('express') var app = express() app.use(express.json()) app.get('/', async(request, response) => { 尝试 { console.log('首页 ...') 等待睡眠(12000) response.send('结束') } 捕捉(错误){ response.end('错误') } }) 功能睡眠(毫秒){ return new Promise(resolve => setTimeout(resolve, ms)); } var server = app.listen(8080, '127.0.0.1', async () => { var host = server.address().address var port = server.address().port console.log('===================== START SERVER ===================') console.log('* 在 http://%s:%s 上运行(按 CTRL+C 退出)', host, port) console.log('* 创建时间' + new Date() + '\n') })
解决方案
同意@unclexo - 了解阻塞/非阻塞调用是什么,并围绕它优化你的代码。如果你真的想为并行请求增加容量,你可以考虑利用集群模块。
https://nodejs.org/api/cluster.html
这将启动子进程并将 HTTP 请求代理给这些子进程。每个子进程都可以根据需要阻塞,并且不会影响其他进程(除非它们之间存在竞争条件)。
推荐阅读
- .net-core - Asp net core SignalR websocket连接时间超过1秒
- apache - 语法错误,使用 fq(过滤查询)时无法从 lucene StandardQueryparser 解析
- android - 发现人工制品的本机依赖项
- next.js - 使用 Netlify 部署 Next.js 网站
- c# - HttpContent.ReadAsStringAsync 导致请求挂起
- cordova - 如何使用适用于 Apache Cordova 的 cordova-android 定位最广泛的 Android 设备?
- java - 如何检查android studio中的日期是否更改?
- math - 如何从两个 3D 方向向量中获得 X 和 Y 旋转(零 Z 旋转)
- c - 不能在 C 中的 main() 之前声明 void 函数
- javascript - 具有单击功能的 addEventListener 不起作用