correct me if wrong, isn't possible start multiple http-servers on same port.
based on interesting nodejs cluster may fork. of cause know there master passing request 1 of forked workers. worker managed operating system or cluster.schedulingpolicy= "rr" "round robin".
the point is: every worker needs own memory, need x-times memory x number of workers.
but if run different (sub)domains out of node app, hold different parts of in_memory database (e.g. simple json file) bound (sub)domain. or based on resources subdomain.example.tdl/resource1/whatever.
it doesn't seams possible. either resource based nor domain based.
in opinion should possible, because can route based on request-objects (res.url) , resources (params) different existing middleware.
so way should possible tell master pass request specific forked instance.
it's possible: need create net server @ master, , pass connection rules workers http server:
var cluster = require('cluster'); if (cluster.ismaster) { var workers = []; // create workers (var i=0; i<require('os').cpus().length; i++) { workers[i] = cluster.fork({worker_index:i, json_index:i}); } // create net server @ 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 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 , pass specific json 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'); // message master , check if need pass http server process.on('message', function(m,c) { if ( "doit" === m ) { server.emit('connection', c); c.resume(); } }); }
Comments
Post a Comment