Node.js

[Node.js / Javascript] RPC로 서버 관리(종료)하기

나태준 2019. 6. 1. 02:00
반응형

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을 쓰는게 좀 껄끄럽다 싶으면... 알아서 뭐 다른걸로 하시등가!

반응형
자바스크립트를 활성화시켜주세요!
[활성화]