Sample Code.
Express와 같이 사용 하였다.
var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path'); var app = express(); var cluster = require('cluster') , numCPUs = require('os').cpus().length; function setting() { app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(express.session()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); }); app.configure('development', function(){ app.use(express.errorHandler()); }); app.get('/', routes.index); app.get('/users', user.list); http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port')); }); } function eachWorker(callback) { for (var id in cluster.workers) { callback(cluster.workers[id]); } } // master if (cluster.isMaster) { for (var i=0; i<numCPUs; i++) { var worker = cluster.fork(); worker.on('message', function(message) { if (message.cmd == 'broadcast') { console.log('send worker'); setInterval(function() { eachWorker(function(_worker) { _worker.send({ cmd: 'broadcast', message: 'test message' }); }) }, 1000); } }); } cluster.on('exit', function(worker, code, signal) { log.info('worker ' + worker.process.pid + ' died'); }); // worker } else { if (cluster.isWorker) { console.log(' I am worker ' + cluster.worker.id); process.on('message', function(message) { if (message.cmd == 'broadcast') { console.log('receive message: ' + message.message); } }); process.send({ cmd: 'broadcast' }); } }
1.1 Master (Parent)
부모 프로세스 로 볼 수 있으며 자식 프로세스를 생성 한다. 위 코드를 참고 시 'broadcast' 라는 명령어로 event 감지 하여 데이터를 주고 받는다.
1.2 Worker (Child)
부모 프로세스 가 fork() 할 경우 생성 된다. 해당 프로세스는 생성 되는 시점에서 'message' 라고 명령어를 보낸다.
1.3 Test
sample를 실행해 보자.
whitelife@whitelife:~/work/cluster_test$ node app.js
I am worker #1
send worker.....
I am worker #2
send worker.....
receive message: test message
receive message: test message
※ 참고 사이트
- node api: http://www.nodejs.org/api/cluster.html
'Nodejs' 카테고리의 다른 글
Express req.param 사용 하기 (0) | 2013.09.23 |
---|---|
Nodejs winston 표준 시간이 안맞는 경우 해결 방법 (0) | 2013.09.23 |
Nodejs Express logger format 설정 하기 (0) | 2013.08.01 |
Nodejs pg library connection pool 관련 (0) | 2013.05.16 |
Nodejs Express 프로젝트 생성 하기 (0) | 2013.05.03 |