-
스파르타) The Last Rollback (D-29, Node.js 게임 서버 최종 프로젝트)TIL-sparta 2024. 7. 29. 21:47
> 과제 진행 간 완료한 사항 및 문제점과 해결 과정을 정리해보았다.학습 키워드: Node.js, Bull queue
1. 완료한 과제 진행 사항
1) Bull Queue를 이용한 매칭 큐 구현 (진행 중):
(회의 내용 및 작업할 내용은 Issue 참고, 당일 추가 내용은 commit 참고)
프로젝트 초반에 팀원 간 작업 내용이 겹치는 일이 있었어서 진행할 작업도 정리할 겸 작업 구분도 명확하게 하기 위해 패킷 및 기능 명세 관련 회의를 길게 한 뒤 두 명씩 파트를 나눠서 작업을 분담하기로 했다. 매칭 큐 및 던전 입장 관련 부분의 작업을 맡게 되었으며, 그 중 매칭 큐 부분을 구현해보았다. 사전 작업으로 Bull 라이브러리의 dependency 및 필요한 constants를 추가했다.
프로젝트 초반에 매칭 큐에 Bull Queue를 사용하기로 이야기가 되어있었다. 이전에 Bull 라이브러리를 사용해본 적이 없어서 작업 초반에 어떤 식으로 구현하면 좋을지 고민을 좀 해봤는데, 매칭 큐 진입 패킷을 수신할 때 매칭 큐에 던전의 스테이지 코드와 패킷을 송신한 유저 정보를 담은 객체로 Job을 생성하여 Bull queue에 추가하는 식으로 작성하기로 했다. 이후 Bull queue 자체를 매칭 queue로 사용할 것인지, 아니면 따로 구분할 것인지를 고민하게 됐는데, 처음에는 전자로 해보려고 Bull queue의 method인 pause와 resume를 사용하여 큐의 길이가 일정 이상일 때 dequeue를 진행하는 방식으로 가닥을 잡고 코드를 작성하다가, 한 번 resume한 이후 어느 시점에 다시 멈출지가 애매하다고 생각되기도 하고, 던전 코드 별로 다른 match queue가 필요하다고 생각되어서 별도의 객체 waitingLists 안에 던전 코드를 key로 가지는 배열들을 두고 Bull queue의 processor가 해당 queue에 인원을 추가할 때 인원 수가 게임의 필요 인원 수에 도달하면 splice하여 매칭 패킷을 보내주는 방식으로 전환했다.
매칭 큐 구현 이후 클라이언트가 보낼 패킷을 받는 핸들러를 구현하여, 만들어둔 matchEnqueue 함수로 유저를 매칭 큐에 추가하고, 추가 완료를 알리는 S_DungeonMatch 패킷을 전송하도록 조정했다.
큐의 process method로 연결해주는 Processor 함수를 module.exports로 작성한 뒤 파일 째로 로드하는 방식으로 분리시킬 수 있다고 읽어서 동일하게 진행해보았으나 생각한대로 동작하지 않아서 일단은 원상태로 복구해두었다.
--
REFERENCES:> 프로젝트 repo
728x90'TIL-sparta' 카테고리의 다른 글
스파르타) The Last Rollback (D-27, Node.js 게임 서버 최종 프로젝트) (0) 2024.07.31 스파르타) The Last Rollback (D-28, Node.js 게임 서버 최종 프로젝트) (0) 2024.07.31 [TIL] TypeScript 배우기 (짧) - 1 (0) 2024.07.28 LeetCode) 1211. Queries Quality and Percentage 풀이 (0) 2024.07.28 스파르타) The Last Rollback (D-32, Node.js 게임 서버 최종 프로젝트) (0) 2024.07.26