node.js - Pass request to specific forked node instance -


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