timeout 408 오류 및 기타 오류 관련 문의

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.4.0
  • 프로젝트명 : 용감한 댕댕이
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :
    안녕하세요. 고생이 많으십니다.
    저번에 문의 드렸던 오류 관련해서, 저희 쪽에서 로직 개선 작업을 진행중인데요. 궁금한 것이 있어 다시 질문 드립니다.

현재 가장 많은 오류를 리턴하고 있는 함수입니다 (15초당 1번 실행)

public void DB_Update_user_info_stage()
{
if (user_info_update_time > 15)
{
Debug.Log("-DB_Update_user_info_stage-");
//업데이트 할 파라미터 관련 코드 삽입.

        Backend.GameData.Update("user_info", user_info.inDate, param, (callback) =>
        {
            if (callback.IsSuccess())
            {
                user_info_update_time = 0;
                retry = 0;
            }
            else
            {
                retry++;
                if (retry <= 1)
                {
                    //1회 실패 시 업데이트 재시도
                    DB_Update_user_info_stage();
                }
                else if(retry == 2)
                {
                    //2회 실패시 업데이트 주기 -30초 및 로그 보냄
                    user_info_update_time = -30;
                    //뒤끝에 로그 보내는 코드 삽입.
                }
                else
                {
                    return;
                }
            }
        });
    }
    else
    {
        return;
    }
}

기존에 retry 없이 10초마다 업데이트 시도하는 로직을 15초 주기 및 retry 하도록 위와 같이 변경하였습니다.
user_info_update_time은 Update()에서 델타타임으로 1씩 더 해줍니다.

기존에는 timeout에러가 동시간대에 많은 횟수의 로그가 찍혔지만, 변경 후에는 덜 찍히는것이 확인 되었습니다. 그래도 여전히 많은 오류가 보이는데요 가장 많이 찍히는 오류가

  1. timeout 408

  2. “An error occurred while sending the request (2)\nError getting response stream (ReadDone2): ReceiveFailure”,

  3. “An error occurred while sending the request (2)\nError: SecureChannelFailure (One or more errors occurred.)”,

네트워크가 안정적인 공간에서 방치했을 때도 해당 오류는 자주 찍히는것을 보아 클라이언트의 네트워크 문제가 주원인은 아닌것으로 보고있습니다.

해당 오류를 해결하기 위해 위의 코드에서 더 개선할 부분이 있을까요?

안녕하세요 개발자님,
문의하신 내용과 관련하여 안내드립니다.

  1. 덜 중요한 재화의 경우 3~5분 간격으로 update
    잦은 호출은 오히려 오류의 발생률을 높이고 DB요금 또한 증가할 수 있습니다.
    현재의 15초 간격보다는 3~5분 간격으로 요청을 권장합니다. (실패에 따른 처리 별도로 할 필요 없음)
  2. 중요한 재화 (인앱 구매, 보석 사용 등)는 이벤트 발생 즉시 update
    실패 확인 및 함수 재호출 로직 필요
    15초 주기 최대 4회까지 실행하는 것을 권장
    • 추가적으로 업데이트 요청 후, 응답이 오는 동안, 다른 재화를 사용하여 업데이트가 중첩되지 않도록 개발하는 것을 권장 (업데이트 작업 중 동일한 row의 업데이트 요청이 들어오면 데이터 꼬임이 발생할 수 있습니다.)
  3. 게임 종료 (백버튼을 눌러 완전 종료하는 것)
    실패 확인 및 함수 재호출 로직 필요
    15초 주기 최대 4회까지 실행하는 것을 권장

2,3번의 경우 모두 최종 실패 시에 업데이트할 컬럼과 함께 '로그’를 삽입하여 에러 확인 및 CS편의를 높이는 것을 권장합니다. 또한 2,3번 모두 유저가 특정 시간 트래픽 과부화로 발생하는 에러의 빈도를 줄이며 분산하기 위해 최대 1분 동안 작동을 기다릴 수 있도록 구성해준다고 생각해주시면 감사하겠습니다. :D