비동기 GetPostListV2에서 블럭이 되는 현상

문의를 남기실 경우 다음 항목을 작성해 주시면 빠른 답변 처리에 도움이 됩니다.

  • 프로젝트명 : Infinite Knight
  • 뒤끝SDK 버전 : 5.1.0
  • 에러 코드 :

안녕하세요.

최근 뒤끝 서버를 이용해서 서버 연동 작업을 진행 하고 있는 과정에서 문제가 있어서 문의를 드립니다.

최근 안드로이드 폰에서 비동기 방식으로 Backend.Social.Post.GetPostListV2를 호출 된 시점에서 간헐적으로 결과 응답 시간이 평소와 다르게 10~20초 정도 걸리면서 비동기가 아닌 동기방식 처럼 블럭이 걸리는 것과 같은 현상을 보이고 있습니다.

처음에는 통신이 안되었나 싶었는데, 오랜 시간을 기다리면 또 응답이 와서 다음으로 넘어가기는 합니다.

지속적으로 발생하는 것이 아니라 가끔씩 이 문제가 발생하고 있습니다.

유니티 에디터에서는 그런 현상이 발생하지 않고 있고, 폰에서만 그런 현상을 보입니다.

제 쪽의 코드에서 문제가 있나 여러 번 확인 해 봤지만 어떻게 방법을 알 수가 없어서 문의를 드립니다.

코드는 아래와 같이 사용 했습니다.

    Backend.Social.Post.GetPostListV2( ( bro ) => 
    {
        Debug.Log(bro);
        if (bro.IsSuccess())
        {
            JsonData admins = bro.GetReturnValuetoJSON()["fromAdmin"];
            for (int i = 0; i < admins.Count; i++ )
            {
                var mailData = new MailData();
                mailData.Parse(admins[i]);
                mailDatas.Add(mailData);
            }
        }
        callback?.Invoke();

혹시 힌트나 제가 확인 해야 될 내용이 있는지 알려 주시면 감사하겠습니다.

안녕하세요 개발자님

혹시 한번에 비동기 함수를 여러 개 호출하시나요?

그러시다면 비동기 함수 대신 SendQueue의 사용을 추천드립니다.

서버 로그 상으로는 모든 요청을 50ms 이하로 처리하고 있는 것으로 보이나, 해당 증상을 보시이시는 것으로 보아

한번에 메시지를 여러 개 보내면서 os 스케줄러에 따라 일부 메시지가 늦게 송신되고 있는 것 같습니다.

관련해서는 아래 두 개의 개발자문서를 참고해주세요.

마지막으로 SendQueue를 사용하시는 경우 SDK 5.1.1 이상으로 업데이트 부탁드리겠습니다.

5.1.1 이상 버전에서는 SendQueue에서 발생하는 버그가 픽스되었습니다.


비동기함수의 경우 별도의 Task를 생성하여 처리하기 때문에 메인쓰레드에 블락은 걸리지 않습니다.

다만 메인쓰레드에서 해당 요청을 대기하는 로직을 추가하셨으면 블락이 걸리는 것과 같은 현상이 일어날 수 있습니다.

이 점도 참고 부탁드리겠습니다.

답변 감사합니다.

해당 API를 호출 하기 바로 전에 비동기 함수 호출 후 결과를 기다리지 않는 로직이 하나 있는 걸 확인하고 수정 후 현재까지는 해당 증상이 발견 되지 않는 것을 확인 했습니다.

비동기 함수 여러개를 동시에 호출 하면 안된다는 것 유념 하겠습니다.

그러나 해당 상황에서 블럭이 걸리는 것은 아직 잘 모르겠습니다.

모든 API호출은 코루틴내에서 호출이 되고 있으며, 해당 응답이 올 때 까지 블럭킹이 되지 않은 상태로 응답을 기다리고 있는 상황입니다.

이 문제도 비동기 함수를 여러개 동시에 호출하지 않으면 발생 되지 않을거라 생각되므로 추후에 비슷한 증상이 발생하면 다시 문의를 드리도록 하겠습니다.

감사합니다. 좋은 하루 되세요~~