【问题标题】:How to make node js express server handle requests in parallel如何让node js express服务器并行处理请求
【发布时间】:2016-06-18 18:54:54
【问题描述】:

有什么方法可以让 Express 服务器并行处理多个 GET 请求?

考虑这个例子:

server.js

var express = require('express')
var app = express();

app.get('/test01', function (req, res, next) {
    for (i = 0; i < 1000000000; i++) {
        var temp = i*i;
    }
    res.end('{"success" : "test01", "status" : 200}');
});

app.get('/test02', function (req, res, next) {
    for (i = 0; i < 1; i++) {
        var temp = i*i;
    }
    res.end('{"success" : "test02", "status" : 200}');
});

app.listen(8081, function () {
    console.log("server listening at  %s:%s", this.address().address, this.address().port)
})

client.js

var request = require("request");

request("http://127.0.0.1:8081/test01", function(error, response, body) {
    console.log(body);
});
request("http://127.0.0.1:8081/test02", function(error, response, body) {
    console.log(body);
});

运行client.js后,输出为:

{"success" : "test01", "status" : 200}
{"success" : "test02", "status" : 200}

这意味着第二个请求必须等待第一个请求完成。

为了使两个请求并行运行并使“test01”非阻塞服务并在 test01 之前完成 test02,我需要在 server.js 中进行哪些更改?

我不想更改 client.js 中的任何内容,也无法控制调用服务的时间。例如 test01 可能会被依次调用 3 次,然后 test02 可能会被调用。

【问题讨论】:

标签: javascript node.js rest express


【解决方案1】:

Node js 是在您的机器上运行的单个进程,即 Node 的单个实例在单个线程中运行。因此,如果您正在做一些计算量很大的事情,node 可能不是正确的选择,也就是说,node 的真正力量在于异步和回调。您可以尝试使用“集群”节点模块,这个想法不是让一个线程在一个 cpu 单元上运行,而是根据 cpu 的数量运行尽可能多的线程,例如:在四核上,您最多可以运行 4 个节点实例.希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 2020-12-20
    • 2016-06-16
    • 2014-06-08
    • 2021-08-12
    • 2018-11-12
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多