개발 메모 - nodejs master/worker 중복 접속 처리 방안
조회 수
25
추천 수
0
- 오류: 현재 방식에서는 동접자가 누적 됨.
- 원인: 접속자 목록을 master 메모리에 보관하나, leave list 올바로 처리하지 못함 ?
- 기타: master interval 방식으로는 일시적인 cpu 과부하 우려됨
- 대안: interval 처리를 worker 에게로 분산, master 는 모든 접속자를 interval 체크하지 않고 각 접속자마다 interval 부여함.
master
접속자 목록 변수? 클래스로 처리하는게 나으려나
- wokrer 에게 받은 socket 정보를 [접속자 목록] 에 넣기.
member_srl: {member_srl, room, [{socketid, time}, {socketid, time}, ...]}
최초 접속일 때만 interval 걸기 (즉 member_srl 기준): time n분 된 것은 오류로 취급하여 내 정보 배열에서 제거
내 정보 배열 길이가 0 이면 interval 해제 및 [접속자 목록]에서 제거 - worker 의 logout_public, disconnect 이벤트를 받으면 내 정보 배열에서 제거 (길이가 0 이면 [접속자 목록] 에서 제거
- 위 1, 2번에서 제거된 목록을 leave list 에 추가, interval - workers 에게 알리기 {room,leave_list}
나머지 과정은 기존 로직대로.
workers
- login_public: {member_srl, socketid, room, time()} master 에게로 / 이후 interval: {member_srl,socketid,room,time()}
- logout_public: {member_srl, socketid, room, time() * -1} master 에게로 / clearInterval
- disconnect: 2번과 동일.
결과
기존의 절차지향 방식을 걷어내고 객체지향으로 캡슐화
코드 알아보기 쉽고, 짧아지고, 버그 고쳐짐. 게다가 cpu, memory 등 시스템 자원 효율적으로 사용