문제상황

원인 분석

  1. 방이 터지며 router가 사라져서 이동하던 패킷들이 사라지나??
    1. 방에 2명이 존재할 경우, process가 바로 종료되지 않아 나쁘지 않은 추측이였음.
    2. 하지만 socket disconnect 이벤트에 추가하기 전, 방이 터지며 router가 삭제되는 것은 동일.
    3. 따라서 router가 없어지는 것은 원인이 아니였음.
  2. 메모리 누수를 막기위해 recordService에서 할당을 해제하면서 프로세스가 끝나는것인가?
    1. 체크해본 결과 전혀 상관없었음
    2. 기록하며 다시 생각해보니 정말 말도안되는 생각
  3. kill signal의 문제
    1. 다른곳에서 문제가 없었으니 kill signal의 문제만 남았음.
    2. 방이 터지며 모든 transport.close 이벤트 발동 ⇒ 등록한 이벤트리스너에서 kill signal 전송, socketdisconect에서도 kill signal 전송 ⇒ kill signal 이 여러번 전송되고 있음.
    3. 정보를 찾아보니 kill signal이 여러번 전송되면 아무리 SIGINT라도 프로세스가 하던 작업을 마무리하지 못하고 종료된다고함

해결

recordConsumer.on('producerclose', () => {
    this.stopRecord();
  });
  
recordConsumer.on('transportclose', () => {
    this.stopRecord();
  });
  
stopRecord() {
  if (this.ffmpegProcess) {
    this.ffmpegProcess.kill('SIGINT');
  }

  this.recordConsumer.close();
  this.plainTransport.close();
}
//producerClose, transportClose 이벤트 삭제

stopRecord() {
  if (this.ffmpegProcess) {
    this.ffmpegProcess.kill('SIGINT');
  }

  this.recordConsumer.close();
  this.plainTransport.close();
}