Photon 연결 손실 및 빠른 재연결
기능 개요
Fusion 2.0.2부터 새로운 Photon Cloud 연결 손실 기능이 도입되었습니다. 이를 통해 NetworkRunner.CloudConnectionLost
콜백을 활용하여 Photon Cloud 연결 시간 초과를 보다 원활하게 처리할 수 있습니다. 이 기능은 네트워크 연결 끊김에 대해 애플리케이션이 어떻게 반응할지에 대해 개발자가 더 많은 제어권을 가질 수 있도록 도와줍니다.
이 기능은 클라이언트/서버 모드에서만 적용되며, 호스트, 서버, 클라이언트 모드에만 영향을 미칩니다. 공유 모드에서는 지원되지 않습니다.
CloudConnectionLost 콜백
목적
NetworkRunner.CloudConnectionLost
콜백은 피어가 Photon Cloud와의 연결을 잃는 상황을 처리하도록 설계되었습니다. 세션을 즉시 종료하는 대신, 이 기능은 자동 재연결 시도를 허용하며, 개발자가 연결 상태에 따라 사용자 정의 동작을 구현할 수 있는 기회를 제공합니다.
콜백 시그니처
C#
NetworkRunner.CloudConnectionLost += (NetworkRunner runner, ShutdownReason reason, bool reconnecting) => { ... };
runner
: NetworkRunner 인스턴스에 대한 참조.reason
: 연결 손실 이유를 나타내는 ShutdownReason.reconnecting
: 세션 재참가가 진행 중인지 여부를 나타내는 boolean 플래그.
호출 조건
이 콜백은 두 가지 주요 상황에서 호출됩니다:
- Photon Cloud 타임아웃: Photon Cloud 시간 초과로 인해 연결이 끊어질 경우, 콜백은
ShutdownReason.PhotonCloudTimeout
을 수신합니다. - 세션 종료: 재참가 시도가 성공하기 전에 세션이 종료된 경우, 콜백은
ShutdownReason.GameNotFound
를 수신합니다.
동작
Cloud Connection Lost 기능이 구현되면:
- 피어는 Photon Cloud 연결 손실 시 자동으로 종료되지 않습니다.
- Fusion은 세션에 자동으로 재참가를 시도합니다.
- 개발자는 제공된 콜백 매개변수를 기반으로 다양한 시나리오를 처리하는 사용자 정의 로직을 구현할 수 있습니다.
서버 동작
서버가 Photon Cloud와의 연결을 잃고 재참가에 실패한 경우:
- Fusion 플러그인은 서버를 자동으로 보이지 않게 하고 세션을 닫습니다.
- 새로운 클라이언트는 세션에 참가할 수 없습니다.
- 이미 연결된 클라이언트는 계속 연결된 상태로 게임을 정상적으로 플레이할 수 있습니다.
이로 인해 서버는 Photon Cloud 연결 손실에도 불구하고 이미 연결된 플레이어들을 위한 게임 세션을 유지합니다.
구현 예제
다음은 Cloud Connection Lost 기능의 기본 구현 예제입니다:
C#
public class NetworkRunnerCloudConnectionLost : MonoBehaviour
{
private void Start()
{
NetworkRunner.CloudConnectionLost += OnCloudConnectionLost;
}
private void OnCloudConnectionLost(NetworkRunner runner, ShutdownReason reason, bool reconnecting)
{
Debug.Log($"Cloud Connection Lost: {reason} (Reconnecting: {reconnecting})");
if (!reconnecting)
{
// Handle scenarios where reconnection is not possible
// e.g., notify the user, attempt manual reconnection, etc.
}
else
{
// Wait for automatic reconnection
StartCoroutine(WaitForReconnection(runner));
}
}
private IEnumerator WaitForReconnection(NetworkRunner runner)
{
yield return new WaitUntil(() => runner.IsInSession);
Debug.Log("Reconnected to the Cloud!");
}
}
이 예제는 콜백 등록, 다양한 시나리오 처리, 성공적인 재연결 대기를 어떻게 구현하는지를 보여줍니다.
모범 사례
- 재연결 시도를 무한정 기다리지 않도록 시간 초과를 구현하는 것을 고려하세요.
- 사용자에게 연결 상태와 필요한 조치를 명확하게 전달하는 피드백을 제공합니다.
이 기능을 활용하여 개발자는 일시적인 연결 문제로 인해 플레이어 경험이 방해받지 않도록 더 강력하고 견고한 네트워크 게임을 만들 수 있습니다.
Back to top