문의 드립니다 .. 롤백관련

에러가 발생한 경우 아래 정보를 모두 제공해주시면 보다 정확한 답변이 가능합니다!

  • SDK 버전 : 5.2.0
  • 에러 코드 : 없음
  • 스테이터스 코드 : 없음
  • 에러메시지 : 없음

sdk 업데이트 이후 게임이 백업된다는 유저가 갑자기 많아져서 문의 드립니다.

지금 코드상으로 유저가 데이터를 update 할때 callback.GetStatusCode() == 200 이 안오면

네트워크 확인 창과 함께 서버로 로그찍게 되어 있고

60초 간격으로 SendQueue.Enqueue(Backend.Utils.GetServerTime) callback.GetStatusCode() ==200

이 안오면 네트워크 확인 창과 서버로 로그찍게 되어 있습니다.

유저가 플레이하면서 업데이트를 하거나 60초간격으로 네트워크 문제가 있거나 200 코드를 받지 못하면

게임 플레이가 불가능 한데 요즘 문제없이 게임을 계속 지속하다가 갑자기 서버문제로 튕기더니 몇시간전으로

롤백되어 있다고 하는데 의심가는건 그 롤백 되는 시점부터 서버에 유저의 데이터가 update 가 안되고 있었다

고 생각할수밖에없습니다. 하지만 update를 하지 않으면 유저는 네트워크 확인창과함께 게임을 지속할수 없구요.

정확한 확인을 위해서 용감한댕댕이 프로젝트 d6f6ecb0-6957-11eb-98e3-15262894ddbf 유저의

16일 01:00:00 시부터 마지막 로그인 시간인 06:40:00 간의 로그를 확인해 주실수 있나요 ? 롤백 의심 지점입니다.

안녕하세요 개발자님,
담당부서를 통해 요청주신 시간대의 로그 확인하여 안내드립니다.

00시 59분 14초 까지는 정상적으로 요청이 확인되며
1시부터 6시 40분 사이에는 GetServerTime 만 요청이 이루어지고 다른 요청은 아무것도 오지 않은것으로 확인됩니다.

private void FixedUpdate()
{
SendQueue.Poll();
}

를 통해 SendQueue 를 처리중인데 큐에 들어온 다른 요청들을 무시하고 GetServerTime에 대한 콜백만 올수 있는
가능성이 있는것인가요 ?

SendQueue에서 특정 요청을 무시하거나 우선순위를 두고 먼저 보내는 기능은 없습니다.
SendQueue 동작방식은 각 요청을 순차적으로 보내는 방식으로
다른 요청을 무시하지 않고, SendQueue에 적재되지 않으면 요청이 가지 않습니다.

서버에 에러 코드 조차 로그가 남지 않은 것으로 보아
SendQueue에 함수가 추가되지 않았거나
SendQueue에 함수를 추가하는 부분에서 무언가 에러가 발생하는 것으로 추측됩니다.

GetServerTime 함수를 SendQueue에 넣고 사용하시는게 맞는지도 확인 부탁드리겠습니다.

네넵 그럼 큐에 함수가 추가조차 되지 않았다고 볼수 있겠네요…

00시 59분 14 에 마지막으로 호출된 함수 , 테이블 명이랑 param 에 들어있는 데이터도 혹시 로그에 남는다면 알려주실수 있나요 .

DM으로 안내드리겠습니다.

네넵 알겠습니다!!!

dm부탁드립니다~~

현재 서버에서 error 콜백시 네트워크확인창 > or 제접속 으로 다시 플레이

플레이도중 간헐적으로 서버 접속이 끊어짐 > bet gateway 502 나 몇번 문의 드렸던 An error occurred while sending the request (5)\nError: NameResolutionFailure (Network subsystem is down 로 인해서. > 토큰을 잃어버림 > 사용자 토큰이 없기 때문에 업데이트 및 로그인 필요한 정보 큐넣을때 SendQueue throw Exception (0): 로 다빠지면서 사용자에게 네트워크 확인창이 안뜸 그 와중에 GetServerTime 은 로그인이 필요없기 때문에 토큰없이 계속 호출 되고 있었음 …

지금 롤백 의심 증상인데 이렇게 밖에 생각할수 없는데 한번 봐주시면 좋겟네요 ㅠ

bet gateway 502나 An error occurred while sending the request (5)\nError: NameResolutionFailure (Network subsystem is down 모두 에러가 발생하는 경우 로그가 확인되어야하나, 해당 유저의 경우 그러한 로그가 남지 않아 에러가 확인되지 않고 있습니다.

또한 사용자 토큰은 로그아웃시에만 로컬에 존재하는 토큰값을 삭제합니다.

DM으로 공유해주신 로그를 확인시 해당 오류는 엑세스 토큰이 없어서 발생하는 오류가 아닌
param 값을 json 라이브러리가 파싱하면서 발생한 오류입니다.
어떤 오류인지 정확히 알기위해서는 param 값 확인이 필요하기해 해당 정보를 공유해주시면 감사하겠습니다.

{“best_stage”:1210,“gold”:90071991384143110,“monster_count”:129252,“total_stage”:131136,“user_experience”:228956,“user_level”:33,“user_skill_point”:0,“user_stage”:271} param 값입니다.
다른 디바이스에서 접속 , 차단유저 추가로 토큰값을 디바이스에서 잃어 버렸을 경우라고 생각해서 테스트 해봤는데 SendQueue throw Exception (0): 에러가 나오더라구요 param 값은 이상없어보입니다…
유저가 백스테이지에 앱을 오래 방치하거나 , 네트워크가 불안정한상태로 오래지속되거나 했을때 토큰이 끊어 지는 경우는 없는건가요?

안녕하세요 개발자님


우선,

엑세스토큰의 경우 로그아웃 했을 시에만 로컬에 존재하는 엑세스토큰과 리프레시 토큰을 삭제 처리합니다.

만약 해당 유저가 다른 기기에서 로그인하거나 혹은 토큰 활성화 이후(로그인 하고) 하루가 지나면 해당 엑세스토큰은 서버에서 만료되지만, 로컬에 존재하는 엑세스토큰이 삭제되지는 않습니다.

즉 서버로 요청은 보낼 수 있고, 이 경우 모든 요청이 엑세스 토큰이 유효하지 않다는 에러가 리턴되고

서버에도 엑세스토큰 오류로 로그가 저장되게 됩니다.


문의 주신 질문

유저가 백스테이지에 앱을 오래 방치하는 경우

유저가 백스테이지에 앱을 오래 방치하는 것이 어떤 케이스인지는 모르겠지만

어떤 로그인 방법이든 로그인 후 하루가 지나면 해당 엑세스토큰은 만료됩니다.

이 경우 유저가 다시 로그인을 하도록 하거나 토큰 갱신을 통해 엑세스토큰을 갱신 시킬 수 있습니다.

네트워크가 불안정한 상태로 오래 지속되는 경우

토큰 값은 서버에 있고 클라이언트에 네트워크 상태와 토큰의 유효성은 무관합니다.


현재 상황에서 추가로 확인해야 되는 것

SendQueue throw Exception (0)

이 예외는 단순히 sendQueue에 삽입한 함수를 queue에서 꺼내 실행할 때 예외가 발생했다는 것이고,

어떤 예외가 발생했는지 추가 확인이 필요합니다.

해당 예외가 발생했을 때의 전체 예외 메시지를 공유 부탁드리겠습니다.

또한 현재 로그인 관련 이슈를 의심하고 계시는데,

만약 로그인이 되지 않은 상태에서 서버로 요청을 보냈을 경우,

The client not login yet. Please login first (0)\n
"로그인을 하지 않았다고 판단한 이유"

예외가 발생하게 됩니다.

해당 예외가 발생하시는 경우 예외 메시지의 공유도 부탁드리겠습니다.

감사합니다.