티스토리 뷰
실시간 게임 듀오 매칭 서비스 겜구에서 소켓 부분은 nodejs 의 socket.io 라이브러리를 활용해서 개발했습니다.
어느날부터 계속해서 소켓 서버가 죽는 문제가 발생했습니다...
로그를 살펴보니, 매칭 객체를 제대로 초기화하지 않아서 생긴 문제였습니다.
1. socket.data.matching 객체 초기화 문제
기존에는 socket.data.matching=null으로 초기화했습니다.
이렇게 했더니 NullPointException이 발생해서.. 다음과 같이 resetMatchingObject 메서드를 만들어서 초기화를 진행했습니다.
function resetMatchingObject(socket) {
socket.data.matching = {
gameMode: null,
roomName: null,
myMatchingInfo: null,
matchingUuid: null,
priorityTree: new PriorityTree(),
highestPriorityNode: null
};
}
그런데도 계속해서 서버가 죽는 에러가 또 발생했습니다.
다시 소켓 서버 로그를 살펴보았습니다..
2. import 오류
예외는 다음 세 가지에서 발생했습니다.
1. matching-fail
2. matching-not-found
3. matching-quit
해당 이벤트들의 공통점이라면, deleteMySocketFromMatching 메서드를 불러온다는 점입니다.
즉, 만들었던 resetMAtchingObject()에서 동일한 에러가 계속 발생했습니다.
로그에서는 PriorityTree가 스코프에 존재하지 않는 상태에서 resetMatchingObject()가 새 트리를 만들거나 초기화하려다가 예외가 발생하는 것이었습니다. 따라서, 이 예외(uncaughtException)를 처리하려다가 프로세스가 다운되는 것이었습니다.
다시 코드를 살펴보니 new Priority를 실행시키기 위한 라이브러리를 불러오지 않은 것이 문제였습니다.
3. 초기화 시점
matching reject, fail, quit 할 때 필요해서
매칭 객체를 matching-found 된 시점에서 초기화하면 안됨
resetMatchingObject 호출 위치 수정
4. matching-quit
매칭 다시하기 중에서 matching-quit 이벤트가 발생하면 제대로 처리가 안됨..
소켓은 살아있어서 matching-success-receiver가 오면 matching-success-sender가 발생하기 때문
지금 status를 FOUND일 때만 SUCCESS로 변경하게해서 매칭 성공이 되는 오류가 발생하지는 않지만,
matching-quit할 때 상태 소켓이 있다면, matching-fail을 보내주는 로직이 필요함
'개발 프로젝트 정리 > Gamegoo 롤 매칭 서비스' 카테고리의 다른 글
| ☄️ RefreshToken 수정 시 동시성 예외 (ObjectOptimisticLockingFailureException) 발생 해결하기 (3) | 2025.06.19 |
|---|---|
| ☄️ matching-found-sender 누락 원인 분석과 UUID 검증 로직 추가 (1) | 2025.06.18 |
| ☄️ GameStyle이 null로 들어올 때 발생한 매칭 오류 해결기 (2) | 2025.06.14 |
- Total
- Today
- Yesterday
- 공룡책
- 혼공단 9기
- SQL
- 스페인 교환학생
- 운영체제
- Signal
- MySQL
- 개발
- 혼공학습단
- 혼공
- AWS
- 깃 예제
- 혼공단
- Linux
- 개발일지
- 프로그래머스
- 해커톤
- 교환학생
- C++
- 자바스크립트
- 백준
- 리눅스
- googleapis
- 혼공단 SQL
- Process
- JavaScript
- 프로젝트
- JS
- 스페인
- nodejs
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |