首页 > 解决方案 > 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')
    })


标签: node.jsconcurrency

解决方案


同意@unclexo - 了解阻塞/非阻塞调用是什么,并围绕它优化你的代码。如果你真的想为并行请求增加容量,你可以考虑利用集群模块。

https://nodejs.org/api/cluster.html

这将启动子进程并将 HTTP 请求代理给这些子进程。每个子进程都可以根据需要阻塞,并且不会影响其他进程(除非它们之间存在竞争条件)。


推荐阅读