UE5/Network

Listen Server에서 DestroySession()에 관한 궁금증

Pyxis 2024. 7. 5. 02:09

Listen Server에서 Host가 DestroySession()을 하면 Client는 어떻게 될까?

반대로 Client가 나갈려면 DestroySession()을 하는 것인가? Client가 DestroySession()을 호출하는 것이 말이 되는가?

 

Session이라 함은 서버 관점의 개념이라 많이 헷갈린다.

 

레딧의 한 답변은,

일단 기본적으로 진행중인 게임세션에서 나갈려면 Local Machine마다 DestroySession()을 호출해줘야 한다.

클라이언트 프로그래머의 관점에서 Session은 서버를 포함한 모든 Machine에서 독립적으로 존재하고, Host로부터 복사된 것까지 Session이라고 칭하기 때문이다.

Host가 Session을 파괴하면 Client는 그 사실을 알지 못해 그 위치에서 프리징이 걸린다.

복사된 Session은 여전히 있으나 Authority를 가진 Host로부터 복제받지 못하기 때문.

 

그래서 프로그래머는 Host가 Session을 종료했을 때, Client가 알아차릴 수 있는, Host Crash를 핸들링할 수 있는 일종의

콜백함수를 직접 만들어 줘야한다.

실제로 답변이 사실인지는 직접 테스트 해봐야 할 것이다.

필자가 마네킹 기본캐릭터로 로비에서 리슨서버로 간단한 테스트를 했을 때, 호스트가 (세션이 아닌)게임을 종료했을 때는 클라이언트 측에서도 세션이 자동으로  종료됐던 것으로 기억한다.

 

Reference : https://www.reddit.com/r/unrealengine/comments/g6y10c/confused_about_multiplayer_destroy_session/