Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js集群+;Express总是调用同一个worker_Node.js_Http_Express_Concurrency_Cluster Computing - Fatal编程技术网

Node.js集群+;Express总是调用同一个worker

Node.js集群+;Express总是调用同一个worker,node.js,http,express,concurrency,cluster-computing,Node.js,Http,Express,Concurrency,Cluster Computing,我尝试使用集群模块与Express同时处理多个http请求 通过下面的代码,我可以生成多个worker,并让它们在同一端口上侦听。大型for循环用于模拟web服务器上的重负载 我想看到的是,当第二个请求传入时,如果一个工作者正忙于处理一个http请求,那么另一个工作者将被调用并处理第二个请求。相反,当我尝试使用curl发出多个请求时,所有请求都由一个工作者顺序处理;没有其他工人被调用,即使他们已经被分叉 可能是我使用Express不正确吗?提前谢谢 var cluster = require('

我尝试使用集群模块与Express同时处理多个http请求

通过下面的代码,我可以生成多个worker,并让它们在同一端口上侦听。大型for循环用于模拟web服务器上的重负载

我想看到的是,当第二个请求传入时,如果一个工作者正忙于处理一个http请求,那么另一个工作者将被调用并处理第二个请求。相反,当我尝试使用curl发出多个请求时,所有请求都由一个工作者顺序处理;没有其他工人被调用,即使他们已经被分叉

可能是我使用Express不正确吗?提前谢谢

var cluster = require('cluster');
if (cluster.isMaster) {
    var cpuCount = require('os').cpus().length;
    for (var i = 0; i < cpuCount; i += 1) {
        cluster.fork();
    }
}

else {
    var http = require('http'),
    app = require('express')();

    http.createServer(app).listen(31415, function () {
        console.log(process.pid + " listening on 31415");
    });

    app.get('/', function (req, res) {
        var t= 0;
        for(var i=0; i < 100000000; i++){
            t++;
        }
        res.send('done');
    });
}
var cluster=require('cluster');
if(cluster.isMaster){
var cpuCount=require('os').cpus().length;
对于(变量i=0;i
是否尝试不使用内置模块

master.js

var cp = require('child_process');
var net = require('net');
// create tcp server listen to a port
var tcp = net.createServer();
tcp.listen(8000, function(){
    // detect cpu number, and fork child process
    for (var i=0;i< require('os').cpus().length; i++) {
        var worker = cp.fork('child.js');
        worker.send(i, tcp._handle);
    }
    tcp.close();
});
var express = require('express');
var app = express();
process.on('message', function(id, handle){

    app.get('/',function(){
        console.log(process.pid+' is listening ...');
    });
    app.listen(handle, function(){
        console.log(process.pid + 'started');
    });
});

这在express 3.x上运行良好

谢谢您的输入!我给出了你的代码并尝试了一下,它似乎起了作用。即使输出仍然指示使用同一工作进程处理所有请求,但至少服务器能够在执行阻塞操作时接受其他请求。我想知道是否由于express的操作范围,输出不准确。