데이터 스트리밍
때로는 네트워크를 통해 대량의 데이터를 전송해야 할 때가 있습니다. 예를 들어, 플레이어가 생성한 맵을 동기화할 때가 이에 해당합니다. 네트워크 속성이나 원격 프로시져 호출(RPCs)는 일반적으로 큰 페이로드를 전송하는 데 적합하지 않으며, 이를 처리하기 위해 Fusion의 데이터 스트리밍 API를 사용할 수 있습니다.
NetworkRunner
의 SendReliableDataToPlayer
및 SendReliableDataToServer
메서드를 사용하여 큰 바이트 배열을 전송할 수 있습니다:
C#
// Large data that needs to be sent
byte[] largeData = new byte [10000];
// Provide 4 numbers as a unique key for the data
var key = ReliableKey.FromInts(42, 0, 0, 0);
// Use in shared mode or as the server/host to send data to players
runner.SendReliableDataToPlayer(playerRef, key, largeData);
// Use as a client to send data to the server/host
runner.SendReliableDataToServer(key, largeData);
이 데이터는 내부적으로 여러 조각으로 나뉘어 서버나 대상 클라이언트로 스트리밍 되고, 다시 조합됩니다.
전체 데이터를 수신하면 INetworkRunnerCallbacks.OnReliableDataReceived
콜백이 호출됩니다. 데이터 전송 상태를 추적하기 위한 별도의 콜백도 제공됩니다:
C#
public void OnReliableDataReceived(NetworkRunner runner, PlayerRef player, ReliableKey key, ArraySegment<byte> data) { }
public void OnReliableDataProgress(NetworkRunner runner, PlayerRef player, ReliableKey key, float progress) { }
여러 데이터 세트를 병렬로 스트리밍 할 수 있으며, 각각은 16바이트의 key
로 식별됩니다(4개의 int
또는 2개의 ulong
으로 생성됨).
key
는 메타데이터를 전송하는 데도 사용할 수 있습니다. 예를 들어, 수신 측에서 데이터를 처리할 객체를 지정하는 데 사용할 수 있습니다. 이는 여러 클래스가 OnReliableDataReceived
콜백을 구현하고, 각각 특정 데이터 타입의 일부만 관심이 있는 경우에 필요할 수 있습니다.