← Назад к вопросам

В каком из протоколов Photon есть ограничение по размеру передаваемых файлов

2.4 Senior🔥 91 комментариев
#Сеть и мультиплеер

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Вопрос об ограничениях размера передаваемых файлов в протоколах Photon

В экосистеме Photon Engine (ныне известной как Photon Fusion и Photon Realtime) ограничения на размер передаваемых файлов или данных сильно зависят от конкретного используемого протокола и конфигурации. Основные протоколы включают UDP, TCP и WebSocket, каждый из которых имеет свои нюансы.

Ограничения по умолчанию в Photon Realtime

В Photon Realtime (ранее Photon Cloud) основным механизмом передачи данных являются операции (operations) и события (events), которые сериализуются и отправляются через сеть. Ключевые моменты:

  • Максимальный размер сообщения (MTU) для протокола UDP по умолчанию ограничен ~1200 байтами для надежной доставки, чтобы избежать фрагментации пакетов на сетевом уровне и минимизировать потери. Это общее сетевое ограничение, а не специфичное только для Photon.
  • При использовании протокола TCP или WebSocket (чаще в веб-контекстах, например, Photon для браузеров) ограничения могут быть выше, но Photon накладывает свои внутренние лимиты для производительности и стабильности.
  • Для передачи данных, превышающих лимит одного сообщения, необходимо реализовывать фрагментацию (chunking) вручную на уровне приложения. Photon не предоставляет встроенной автоматической фрагментации для произвольных больших файлов в базовом API событий.
    Пример ручной фрагментации данных в Unity (C#):
```csharp
// Упрощенный пример отправки большого массива байт по частям
public void SendLargeData(byte[] largeData, int chunkSize = 1000)
{
    int numChunks = (int)Mathf.Ceil(largeData.Length / (float)chunkSize);
    for (int i = 0; i < numChunks; i++)
    {
        int offset = i * chunkSize;
        int length = Mathf.Min(chunkSize, largeData.Length - offset);
        byte[] chunk = new byte[length];
        System.Array.Copy(largeData, offset, chunk, 0, length);
        
        // Отправка каждого чанка как отдельного события
        RaiseEventOptions raiseOptions = new RaiseEventOptions { Receivers = ReceiverGroup.All };
        PhotonNetwork.RaiseEvent(CustomEventCode.DATA_CHUNK, chunk, raiseOptions, SendOptions.SendReliable);
    }
}
```

Photon Fusion и расширенные возможности

В Photon Fusion (для состязательных multiplayer-игр с упором на state synchronization) передача больших файлов не является основной задачей протокола. Однако:

  • Networked Properties и RPC-вызовы также имеют ограничения, связанные с размером буферов сериализации. Например, RPC-параметры не должны превышать 64 КБ в сериализованном виде.
  • Для передачи файлов (например, пользовательских аватарков или модов) рекомендуется использовать дополнительные сервисы (например, облачное хранилище), а Photon использовать только для передачи ссылок или метаданных.

Выводы и рекомендации

  • Строгое ограничение (~1200 байт) наиболее актуально для UDP-протокола в Photon Realtime при отправке событий через RaiseEvent.
  • TCP/WebSocket-протоколы допускают большие размеры, но в любом случае следует проверять актуальные лимиты в документации Photon для вашего тарифного плана (бесплатные планы могут иметь более строгие ограничения).
  • Практический подход:
    *   Для передачи файлов до **1-2 МБ** можно реализовать фрагментацию, как в примере выше, с использованием **надежной отправки (SendReliable)**.
    *   Для больших объемов данных используйте **внешнее хранилище** (AWS S3, Google Cloud Storage) или специализированные сервисы обмена файлами, передавая через Photon только **URL или идентификаторы**.
    *   Всегда **компрессируйте данные** (например, с помощью `System.IO.Compression.GZipStream`) перед отправкой, если это применимо.

Ключевой итог: Прямая передача файлов через Photon возможна, но требует ручного управления фрагментацией и учетом ограничений протокола. Для большинства продакшен-сценариев с большими файлами предпочтительна гибридная архитектура с внешним хранилищем.

В каком из протоколов Photon есть ограничение по размеру передаваемых файлов | PrepBro