티스토리 뷰

Nodejs

clustering node + socket.io + redis 사용법

코더와개발자사이 2016. 4. 14. 21:59

nodejs는 싱글 쓰레드 기반으로 동작한다.

싱글 쓰레드 기반의 한계점을 극복 하기 위해 node자체적으로 clustering을 지원을 한다


사용법은 간단하다


var http = require('http');

var cluster = require('cluster');

//멀티 코어 클러스터

if (cluster.isMaster) {

    // 클러스터 워커 cpu 갯수 만큼 프로세스  포크 한다

    for (var i = 0; i < numCPUs; i++) {

        cluster.fork();

    }

    //프로세스가 죽게 되면 받는 이벤트

    cluster.on('exit', function(worker, code, signal) {

        console.log('worker ' + worker.process.pid + ' died');

    });

} else {

//작업 시작


}

간단한 구분 으로 cluster를 사용할 수 있다


하지만 cluster 환경에서 node js 모듈인 socket io는 정상 작동하지 않는다 

이유는 cpu갯수 만큼 할당된 프로세스들은 소켓 정보를 공유 하지 못하기 때문에 

적상적으로 작동 될 수 없다.

이런 부분을 해소 하기위해서 redis서버와 redis 모듈을 설치 한 후 socket 정보들을

redis에서 공유 할 수 있도록 해주면 cluster 환경에서도 적상적인 socket io를

사용 할 수 있다

-----------------------------------------------소스

var http = require('http');

var cluster = require('cluster');

var numCPUs = require('os').cpus().length;

var cluster = require('cluster');

var httpServer;


if (cluster.isMaster) {

    // 클러스터 워커 프로세스 포크

    for (var i = 0; i < numCPUs; i++) {

        cluster.fork();

    }

 

    cluster.on('exit', function(worker, code, signal) {

        console.log('worker ' + worker.process.pid + ' died');

    });

} else {

httpServer = http.createServer(function(req, res) {

}).listen(1337);


var io = require('socket.io').listen(httpServer);

var redis = require('socket.io-redis');                     //npm install  socket.io-redis

io.adapter(redis({ host: 'localhost', port: 6379 }));     

console.log('Server running at http://localhost:1337/');

io.sockets.on('connection', function(socket) {

});

}

이렇게 소스만 추가 하면 

Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.

1:6379

    at Object.exports._errnoException (util.js:890:11)

    at exports._exceptionWithHostPort (util.js:913:20)

    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1059:14)

이런 에러를 볼 수 있다


redis 서버를 띄워야 한다

https://github.com/dmajkic/redis/downloads   //redis 설치 파일 경로

binary 형태로 exe 파일 실행시 바로 서버를 띄울 수 있다


[9044] 14 Apr 21:55:39 # Warning: no config file specified, using the default co

nfig. In order to specify a config file use 'redis-server /path/to/redis.conf'

[9044] 14 Apr 21:55:39 * Server started, Redis version 2.4.5

[9044] 14 Apr 21:55:39 # Open data file dump.rdb: No such file or directory

[9044] 14 Apr 21:55:39 * The server is now ready to accept connections on port 6

379

[9044] 14 Apr 21:55:39 - 0 clients connected (0 slaves), 1179896 bytes in use

[9044] 14 Apr 21:55:41 - Accepted 127.0.0.1:52918


redis 서버를 띄우면 자동으로 127.0.0.1 6379포트로 서버가 실행이 된다 

redis 정상 실행 후 노드를 다시 실행 하면 정상 동작하는 걸 확인 할 수 있다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함