반응형
npm start / stop / restart로 서버를 관리하는데 다 좋은데 서버를 어찌 꺼야할지 모르겠는거.
그래서 그냥 RPC를 이용해서 관리하기로 했다.
1. 모듈 선언
모듈 선언해준다. 당연히 npm install도 해준다.
// RPC
var rpc = require('node-json-rpc');
2. RPC 서버 옵션 선언
RPC 서버 정보를 지정해준다. 포트번호와 호스트 정보 정도만 신경쓰자. 여기서부턴 다 initializer에 들어간다.
// RPC 수신 대기
var options = {
port: 3456,
host: '127.0.0.1',
path: '/',
strict: false
}
3. RPC 서버 객체를 선언해주고 메소드 콜백도 정의해준다.
이전 게시물과 이어지지만 shutdown 명령을 받으면 마스터 서버는 모든 슬레이브 서버에 shutdown 명령을 내린다. 그리고 finalizer를 호출해서 서버 종료처리를 해준다. 중간의 콜백은 뭐 대충.. RPC 시그널을 보낸 사람에게 보내는 콜백이다. 정상적으로 잘 종료 될테니(?) true를 보내준다. 귀찮아서 예외(에러) 처리는 안했다. 맘에 안들면 해주면 된다.
var rpcServer = new rpc.Server(options);
rpcServer.addMethod('shutdown', (params, callback) => {
logger.info('종료 요청 수신');
for (var id in cluster.workers) {
cluster.workers[id].send({ sender: 'master', op: 'shutdown', args: [] });
}
callback(null, true);
finalize().then(() => {
logger.info('서버 종료');
process.exit(0);
});
});
rpcServer.start((error) => {
if (error)
throw error;
else
logger.info('RPC 요청 수신중...');
});
4. npm stop에 등록
뭐 대충 이런식으로 등록해주고 npm stop 치면 잘 종료된다.
"scripts": {
"start": ...,
"stop": "curl -d '{\"jsonrpc\": \"2.0\", \"method\": \"shutdown\", \"params\": [], \"id\": null}' 127.0.0.1:3456"
}
stop에 저런식으로 curl을 쓰는게 좀 껄끄럽다 싶으면... 알아서 뭐 다른걸로 하시등가!
반응형
'Node.js' 카테고리의 다른 글
[Node.js / Javascript] Readline 모듈로 서버 관리 콘솔 만들기 (0) | 2019.06.01 |
---|---|
[Node.js / Javascript] Socket.IO 사용시 로드밸런서(리버스 프록시)에서 넘어오는 진짜 IP 얻기 (0) | 2019.06.01 |
[Node.js / Javascript] Socket.IO와 HTTP 서버를 같은 포트에서 Listen하기 (0) | 2019.06.01 |
[Node.js / Javascript] Winston 모듈로 스마트하게(?) 서버 로깅하기 (0) | 2019.06.01 |
[Node.js / Javascript] Async 모듈로 비동기 함수들 교통 정리 해주기 (0) | 2019.06.01 |