Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발자공부일기

웹소캣게임 트러블슈팅 본문

트러블슈팅

웹소캣게임 트러블슈팅

JavaCPP 2024. 12. 18. 16:22

최고기록 갱신시 접속중인 모든 유저에게 전송

  • 배경 : 서버에 저장한다고 가정하는 src쪽 전역변수 highScore에 모든 유저들중 최고기록을 저장하고 갱신될때마다   실시간으로 모든 유저에게 업데이트(브로드캐스트)해주고 싶었는데 새로 접속(새로고침)해야만 최고점수가 갱신되는걸 발견
  • 발단 : 이렇게 되면 실시간통신이라 보기 힘들었다.
  • 전개 : 그래서 AI와 힘을 합쳐 코드를 천천히 읽어봤다.
  • 위기 : 아무리 봐도 코드상으로 이상한게 없었고 못찾을뻔했다.
  • 절정 : 데이터가 잘 전달 되는지(서로 응답이 잘 주고받아 지는지) 확인하던 도중 socket.on을 작동시켜줄 이벤트이름이 return 데이터에서 누락된걸 발견했다.
    setupSocketListeners(socket) {
        // 전역 최고 점수 업데이트 수신 (일반 응답)
        socket.on('response', (response) => {
            console.log('Received response:', response);
            if (response.event === 'globalHighScore' && response.data) {
                this.globalHighScore = response.data.score;
            }
        });

        // 브로드캐스트된 글로벌 하이스코어 업데이트 수신
        socket.on('globalHighScore', (data) => {
            console.log('Received broadcast high score:', data);
            if (data && data.score !== undefined) {
                this.globalHighScore = data.score;
            }
        });
      }
    원래 여기서 socket.on('globalHighScore', (data)   이 친구가 실행됐어야 한다.
  • 결말 : 단순히 아래 코드처럼 event값을 추가해줘서 해결했다.
    return {
                    status: 'success',
                    broadcast: true,
                    event: 'globalHighScore',
                    data: {
                        score: globalHighScore
                    }
                };

 

Redis에 저장 문제

  • 배경 : 저번에 진행하던 최고스코어 저장을 redis로 옮겼는데 A유저가 갱신하면 B유저의 화면에 표시되는 최고점수가 바로 갱신되지 않고 새로고침을 해야 갱신되는걸 발견했다.
  • 발단 : 이러면 의도대로 실시간이 아니게 된다고 생각함
  • 전개 : 그래서 로그도 찍어보고 최고점수를 저장하고 화면에 나타내는 부분들을 더 추가해보고 여러 방법을 시도했다.
  • 위기 :그랬더니 매 프레임마다 최고점수를 저장하게돼서 redis가 저장을 거부했다.
  • 절정 : 그래서 저장하는 부분을 게임 종료시마다 저장하게 바꿨다.
  • 결말:저장문제는 해결했으나 동시갱신은 여전히 고치지 못했다.

고치지 못할줄 알았으나 다음날 우분투에 redis를 설치하지 않을걸 알고 설치했더니 redis는 정상작동하고

const socket = io(['http://domain.com:3000','http://localhost:3000','http://12.345.6.789:3000'], {
  query: {
    clientVersion: CLIENT_VERSION,
  },
});

소캣에 내가 배포한 도메인주소를 이런식으로 배열로 집어넣으니 접속도 된다.

'트러블슈팅' 카테고리의 다른 글

중복 랜더링  (0) 2025.01.17
패킷 길이문제  (0) 2025.01.16