inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Session #4

소켓 SendAsync 예외 발생시 대처방법에 대한 질문입니다

해결된 질문

567

우웅

작성한 질문수 10

0

안녕하세요 선생님! 강의 잘 듣고 있습니다

유니티 연동하면서 간혹 클라에서 서버로 보내는 과정에서 세션 클래스의 SendAsync 부분이 예외를 발생시켜 pendinglist 를 비워주는 clear 함수를 호출 하지 못해

if (_pendingList.Count == 0)
    RegisterSend();

영원히 send가 막히는 경우를 발견했습니다

try
{
    bool pending = _socket.SendAsync(_sendArgs);
    if (pending == false)
        OnSendCompleted(null, _sendArgs);
}
catch (Exception e)
{
    RegisterSend(); // 수정한 부분
    Console.WriteLine($"RegisterSend Failed {e}");
} 

이렇게 RegisterSend(); 를 다시 호출해서 SendAsync 가 될때까지 시도를 하는 방식으로 고쳤더니 send가 막히는 현상을 없애기는 했습니다만

제가 생각하는 이 대처방법의 문제는 sendAsync가 계속 예외를 발생시키면 무한루프를 만들어서 이게 맞는 대처방법인지 의문이 듭니다...

C# unity 네트워크

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

SendAsync 메서드에서 발생하는 예외를 무한루프로 처리하는 방식은 올바른 대처 방법이 아닐 수 있습니다. 예외가 발생한다는 것은 어떤 문제가 있음을 나타내는데, 계속해서 예외를 무시하고 재시도한다면 문제가 해결되지 않을 가능성이 있습니다.

먼저, 예외의 원인을 파악해보셔야 합니다. SendAsync 메서드가 어떤 예외를 발생시키는지 확인하고, 해당 예외가 왜 발생하는지 알아보는 것이 중요합니다. 예외의 종류와 발생 이유에 따라 적절한 대처 방법을 선택할 수 있습니다.

예외가 발생하는 상황을 정확히 파악하고 예외 처리 로직을 구성해야 합니다. 예를 들어, 네트워크 연결이 끊어진 경우에는 연결을 재시도하는 것이 일반적입니다. 그러나 예외의 종류에 따라서는 다른 처리 방식이 필요할 수도 있습니다.

무한루프처럼 예외를 무시하고 재시도하는 방식은 예외의 원인을 해결하지 않고 그냥 넘어가는 것이므로, 추천할만한 방법은 아닙니다. 예외 발생의 원인을 확인하고, 가능하다면 해당 예외에 맞는 처리 방법을 적용하는 것이 좋습니다.

더 자세한 내용이 필요하시다면, 예외의 종류와 함께 상세한 코드나 오류 메시지를 제공해주시면 더 정확한 도움을 드릴 수 있을 것 같아요.

TLS 질문드립니다.

0

52

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

55

2

Unity Span

0

81

2

XML, Dll 차이점

0

110

2

Session 질문입니다

0

81

1

Write Read 커서 키워드

0

78

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

73

2

네트워크 Send 전담 스레드 배치

0

100

2

UnhandledException 으로 서버 터지는 경우

0

88

2

컨텐츠 단, 엔진 단

0

106

1

질문 있습니다

0

78

2

C# 게임서버 3D MMORPG

0

150

2

유니티6 버전

0

100

2

receive하는 부분과 send하는 부분의 차이

0

134

2

커서의 위치의 중요성

0

105

2

C++ 전혀 모르는데 C# 서버

0

170

2

강의에 질문이 있습니다

0

88

2

멀티스레드 이해도 질문

0

96

1

500 vs 500

0

131

3

OnAcceptHandler 액션 함수

0

64

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

193

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

83

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

107

1

스핀락 질문.

0

111

2