UNPKG

codekart

Version:

Web application framework for Node.js

81 lines (60 loc) 1.95 kB
//服务器模块 var cluster = require('cluster'); var numCPUs = require('os').cpus().length; //cpu核心数 var server_websocket = load.core('!server/websocket'); var server_http = load.core('!server/http'); var config = load.config(); /** * 启动http服务器 */ exports.run = function(){ //开启多核多个进程利用多核cpu if(cluster.isMaster) { //工作者进程 // 根据 CPU 个数来启动相应数量的 worker if(config.worker>0) numCPUs = config.worker; for (var i = 0; i < numCPUs; i++) { cluster.fork({ws_port_inc:i}); wsPortInc.set(i+1,i); } cluster.on('fork', function(worker) { //log(worker); log('worker id '+worker.id+' pid ' + worker.process.pid + ' starting ...'); // }); cluster.on('exit', function(worker) { log('worker pid ' + worker.process.pid + ' died.'); //log(worker); var wsport = wsPortInc.change(worker.id) , forkdelay = config.forkdelay || 1000; setTimeout(function(){ //延迟fork子进程 cluster.fork({ws_port_inc:wsport}); },forkdelay); }); } else { // 当为Worker 进程时 启动服务器 server_http.run(); //server_websocket.run(); } }; /** * 监听websocket端口管理器 */ var wsPortInc = (function(){ var A = {} , next_wid = 0 , Ports = {}; A.set = function(worker_id,port){ Ports['id_'+worker_id] = port; next_wid = worker_id+1; }; A.change = function(old_wid){ var oldport = Ports['id_'+old_wid]; Ports['id_'+next_wid] = oldport; delete Ports['id_'+old_wid]; //log(Ports); next_wid++; return oldport; }; return A; })();