将请求传递给特定的分叉节点实例

纠正我,如果我错了,但不可能启动同一端口上的多个HTTP服务器。

基于此,NodeJS集群可能会发生分裂。 因为我知道主人是什么把请求传给了一个分叉的工人。 什么工作由操作系统pipe理或者cluster.schedulingPolicy =“rr”为“循环”。

重点是: 每个工人都需要自己的记忆,所以你需要x倍多的记忆,其中x是工人的数量

但是,如果我喜欢从我的节点应用程序运行不同的(子)域,我也喜欢把一个in_memory数据库(例如一个简单的JSON文件)绑定到(子)域的不同部分。 OR基于像subdomain.example.tdl/resource1/whatever这样的subdomain.example.tdl/resource1/whatever

它不接缝是可能的。 无论是基于资源还是基于域。

在我看来,它应该是可能的,因为我可以通过不同的现有中间件基于请求对象(res.url)和资源(params)进行路由。

这样,就可以告诉主服务器将请求传递给特定的分叉实例。

这是可能的:你需要在主机上创buildnetworking服务器,并通过你的规则传递连接到工人http服务器:

 var cluster = require('cluster'); if (cluster.isMaster) { var workers = []; // Create workers for (var i=0; i<require('os').cpus().length; i++) { workers[i] = cluster.fork({WORKER_INDEX:i, JSON_INDEX:i}); } // Create net server at master var server = require('net').createServer({pauseOnConnect:true}, function(c) { var b = Math.floor( Math.random()*workers.length ); workers[b].send("doit",c); }).listen(3000); } else { // Load specific data for worker (pass parametr JSON_INDEX) var json = "{default:default}"; try { json = require("fs").readFileSync('./data_'+process.env.JSON_INDEX+'.json'); } catch (e) {} // Create http server and pass specific json to client var server = require('http').createServer( function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(json); }).listen(0,'127.0.0.1'); // Get message from master and check if need pass to http server process.on('message', function(m,c) { if ( "doit" === m ) { server.emit('connection', c); c.resume(); } }); }