Skip to content

rhymix

개발 메모 - nodejs master/worker 중복 접속 처리 방안

조회 수 25 추천 수 0
  • 오류: 현재 방식에서는 동접자가 누적 됨.
  • 원인: 접속자 목록을 master 메모리에 보관하나, leave list 올바로 처리하지 못함 ?
  • 기타: master interval 방식으로는 일시적인 cpu 과부하 우려됨
  • 대안: interval 처리를 worker 에게로 분산, master 는 모든 접속자를 interval 체크하지 않고 각 접속자마다 interval 부여함.

master

접속자 목록 변수? 클래스로 처리하는게 나으려나

  1. wokrer 에게 받은 socket 정보를 [접속자 목록] 에 넣기.
    member_srl: {member_srl, room, [{socketid, time}, {socketid, time}, ...]}
    최초 접속일 때만 interval 걸기 (즉 member_srl 기준): time n분 된 것은 오류로 취급하여 내 정보 배열에서 제거
    내 정보 배열 길이가 0 이면 interval 해제 및 [접속자 목록]에서 제거
  2. worker 의 logout_public, disconnect 이벤트를 받으면 내 정보 배열에서 제거 (길이가 0 이면 [접속자 목록] 에서 제거
  3. 위 1, 2번에서 제거된 목록을 leave list 에 추가, interval - workers 에게 알리기 {room,leave_list}
    나머지  과정은 기존 로직대로.

workers

  1. login_public: {member_srl, socketid, room, time()} master 에게로 / 이후 interval: {member_srl,socketid,room,time()}
  2. logout_public: {member_srl, socketid, room, time() * -1} master 에게로 / clearInterval
  3. disconnect: 2번과 동일.

결과

기존의 절차지향 방식을 걷어내고 객체지향으로 캡슐화

코드 알아보기 쉽고, 짧아지고, 버그 고쳐짐. 게다가 cpu, memory 등 시스템 자원 효율적으로 사용

트디개발자
등록된 소개글이 없습니다.

rhymix