인지
밤 페이즈에서 모든 플레이어의 행동이 완료된 후에도 클라이언트가 밤 결과를 정상적으로 수신하지 못하는 문제가 발생함.
추가적으로, 클라이언트에서 같은 이벤트가 중복으로 여러 번 출력되는 현상이 확인됨. 게임에 참여한 모든 플레이어에게 이벤트가 개별적으로 전송되면서, 결과가 8번 출력되는 문제가 발생함.
원인
서버에서 processNightResult 실행 후 결과를 클라이언트에 명확하게 전송하지 않음.
ROOM:NIGHT_RESULT 이벤트가 정상적으로 실행되지 않거나, 특정 조건에서 누락될 가능성이 있음.
server.to(roomId).emit()을 사용하여 이벤트를 전송하는 과정에서, 방(Room)에 속한 모든 클라이언트가 개별적으로 동일한 이벤트를 수신하게 됨.
이로 인해 클라이언트에서 하나의 이벤트를 한 번만 받아야 하는데, 여러 번 출력되는 문제가 발생함.
대응
서버에서 강제적으로 추가 이벤트를 전송하여 문제 해결 시도.
server.to(roomId).emit('GAME:RESULT_TEST'); 이벤트를 추가하여 클라이언트가 결과를 정상적으로 받을 수 있도록 조치함.
GAME:RESULT_TEST 이벤트를 클라이언트에서 확인한 결과, 정상적으로 반응하는 것을 확인.
또한, 클라이언트에서 중복 출력되는 문제를 해결하기 위해 다음 조치를 검토함.
이벤트가 중복 실행되지 않도록 서버에서 한 번만 실행되도록 개선.
클라이언트에서도 동일한 이벤트를 여러 번 수신하지 않도록 필터링 로직 추가.
해결
triggerNightProcessing에서 server.to(roomId).emit('GAME:RESULT_TEST');를 추가한 후, 클라이언트가 정상적으로 반응하는 것을 확인함.
클라이언트에서 중복 수신 문제가 발생하는 원인을 분석한 결과, 서버에서 이벤트가 플레이어 수만큼 개별 전송되는 것이 원인이었음.
해당 문제를 해결하기 위해 이벤트가 한 번만 실행되도록 처리.
개선
기존 이벤트(ROOM:NIGHT_RESULT)가 정상적으로 동작하는지 점검하고, 왜 실행되지 않았는지 원인 분석 필요.
GAME:RESULT_TEST를 추가해 테스트를 진행했으므로, 최종적으로 ROOM:NIGHT_RESULT 이벤트가 예상대로 실행되도록 수정해야 함.
서버에서 processNightResult가 한 번만 실행되는지 확인하고, 불필요한 중복 실행을 방지하기 위한 구조 개선 필요.
클라이언트에서도 이벤트를 한 번만 처리하도록 개선하여, 같은 결과가 여러 번 출력되지 않도록 조치.
결론
이벤트 정상 수신 문제 해결: GAME:RESULT_TEST 이벤트를 추가하여, 클라이언트가 밤 결과를 정상적으로 수신할 수 있도록 조치함.
중복 이벤트 실행 문제 해결: 클라이언트에서 같은 이벤트가 여러 번 출력되는 문제를 방지하기 위해 서버에서 이벤트를 한 번만 실행하도록 개선.
추가 검토 예정: 기존 ROOM:NIGHT_RESULT 이벤트가 정상적으로 작동하지 않은 원인을 파악하고, 이후 유사한 문제 발생 가능성이 있는 다른 이벤트 처리 방식도 점검할 예정.