Node.js Cluster + Express总是调用同一个worker

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

通过下面的代码,我可以产生多个工作人员,并让他们都在同一个端口上进行监听。 大的for循环是模拟Web服务器上的重负载。

我想看到的是,如果工作人员在第二个请求进入时正忙于处理一个http请求,则会调用另一个worker并处理该第二个请求。 相反,当我尝试使用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'); }); } 

尽量不要使用内置的模块?

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(); }); 

child.js

 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正常工作