TIL 113. 2024-06-11

이준구·2024년 8월 14일
0

TIL 순서

목록 보기
115/119
post-thumbnail
  1. 서로 다른 setInterval의 구조로 형성하기 전의 기존 로직

기존 로직 구성)

1. 게임 시나리오 로직을 단계 별로 구성
2. 클라이언트에서 특정 단계를 수행하여 서버에 전달
3. 서버에서는 모든 players의 수행 여부를 판단
4. 서버에서 다음 시나리오 로직을 모든 클라이언트에 전달

  • 위와 같이 게임 시나리오 로직을 전부 쪼개어 각 클라이언트는 해당 시나리오 로직을 수행하고, 서버에서는 모든 클라이언트의 로직 수행 여부를 판단하여, 다음 시나리오 로직을 클라이언트에 전달

기존 로직 해석)

1. 1명의 player(방장)게임시작 요청을 서버에서 전달
2. 서버에서 첫번 째 게임 시나리오 로직인 r0-1: socket Event을 각 클라이언트에게 전달
3. 클라이언트는 전달받은 r0-1: socket Event 를 수행 후 완료 상태를 서버에 전달
4. 서버에서는 요청 순서에 따라 모든 Players의 로직 수행 상태를 체크
5. 로직 수행이 완료되었을 경우, 다음 시나리오 로직인 r0-2: socket Event를 모든 클라이언트에 전달
...
5. 게임 종료

기존 로직의 문제)

1. 문제 발생

  • 클라이언트의 요청과 서버에서의 응답을 주고 받는 과정에서 통신이 계속 쌓이는 문제가 발생
  • 투표시간, 최후의 투표, 마피아 시간 등 여러 players가 서버에 요청하는 부분에서 문제가 발생

    ex) 5명의 player가 존재하는 마피아 방
    • 1명의 player(방장)게임시작 요청을 서버에서 전달
    • 서버에서는 게임 시나리오 로직을 각 클라이언트에게 전달
      ...
    • 투표시간) 모든 players가 동시에 투표를 하여 서버에 전달
    • 클라이언트의 5개의 요청이 서버에 전달
    • 서버에서는 5개의 요청을 전부 중복된 5개각 클라이언트에게 응답
    • 각 클라이언트는 동일 로직을 5번 수행
      ...
    • 클라이언트의 25개의 요청이 서버에 전달
    • 서버에서는 25개의 요청을 전부 중복된 25개로 응답




2. 문제 이유

  • supabase의 이슈(처리 속도 및 DB 작업(트랜잭션)이 독릭접으로 처리되지 않고 동시에 처리)

    실제 supabase의 각 데이터 처리 시간은 0.5s시간이 소요된다.
    만약 0.5s시간 이내에 5개의 요청이 서버에 전달되면, 각 요청에 대한 작업이 순서대로 진행되는 게 아닌 동시에 진행되는 현상이 존재하였다.
    첫번 째 요청에 대한 로직이 수행된 후, 모든 players의 로직 수행 여부에 대한 결과값이 true로 전달되어 다음 시나리오 로직이 수행되는 에러가 발생한다.
    정상적인 경우에는 첫 번째, 두 번째, 세 번째, 네 번째에서는 모든 players의 로직 수행 여부에 대한 결과값이 false로 전달되어야하며, 마지막 요청에 대해서만 다음 시나리오 로직이 1번만 작동되어야한다.
profile
개발 중~~~ 내 자신도 발전 중😂🤣

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN