Davilkus
@Davilkus
Делаю игры)

Как сделать загрузку ресурсов (asset bundles) с того же сервера, который обрабатывает мультиплеер?

Мне нужно сделать загрузку модов (аддонов) при подключению к серверу. (Как это сделано в движке Source (и GoldSrc): например в Garry’s Mod, CS 1.6):

Когда игрок подключается к другому - ему автоматически устанавливаются моды и ресурсы того игрока (сервера).

Подскажите пожалуйста - есть ли какие-нибудь готовые решения или надо писать самому? И как это сделать? С помощью UWR? Есть ли какие-нибудь туториалы/книги по этому поводу? Спасибо.

P.S. Имею опыт работы с Photon и Mirror.
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@rPman
Система обновлений очень сложная вещь, особенно когда у тебя модификации, которые не обязательны к загрузке. Готовых инструментов скорее всего нет либо те что есть будут ограничивать тебя в чем то на столько сильно, что сил на преодоление этого потратишь очень много.

У тебя должна быть:
1. система описания и хранения пакетов дополнений/модификаций, с учетом их версий и взаимозависимостей
уже на этом этапе готовое это что то типа пакетного менеджера из мира linux (dpkg apt или rpm, ими все не заканичивается пакетных менеджеров сотни в мире) именно они предлагают полную и готовую инфраструктуру по всем параметрам, осторожно с лицензиями, там могут быть GPL а не LPGL, что ограничит использование в проприетарных проектах.
Помимо просто функции добавить пакет+версия, тут должна быть функция отзыва.. попробуй реализуй когда у пакета зависимости
2. система раздачи и загрузки файлов
настоятельно рекомендую не изобретать ничего нового, если размер пакетов маленький (сотни мегабайтов максимум) то хватит просто http протокола, статики на веб сервере (именно его используют вышеописанные пакетные менеджеры)
Если файлы большие, то сам бог велел использовать torrent протокол, на сервере достаточно минимального трекера и так же http веб сервер со статикой, на клиенте - libtorrent с поддержкой webtorrent (последние версии) и опционально запущенный торент клиент, для минимальной поддержки dht (в этом случае не потребуется раздавать torrent файлы, хватит просто magnet ссылки, но обычно это уже не важно)
В этом случае можно сильно (от слово много) сэкономить денег на поддержке серверов, так как после нескольких сотен клиентов, загружающих единомоментно гигабайты контента (сами гигабайты не дорогие, проблема раздать сразу много), опустошаются даже богатые кошельки.
3. система контроля за целостностью файлов клиента
это вообще адовый ад, готовых инструментов чтобы все в вместе - нет
по отдельности да, например готовые античит (за много денег)
Решение тесно переплетается с собственно системой установки файлов (каждый пакет контролирует свой список файлов, какие то модифицирует, какие то заменяет, контролировать конфликты зависимостей (даже linux-пакетные менеджеры это делают с помощью клиента, но тут вопрос больше к тому как организуешь саму базу и как ее будешь тестировать, пользователи иногда ну очень странные вещи хотят, например фиксируют старые версии отдельных пакетов)

Можно выкладывать в качестве пакета сразу готовую структуру каталогов прямо в торент файле - отличная идея, тогда контроль целостности файлов можно отдать на откуп библиотеки libtorrent, за исключением пересечений файлов разных версий (этого следует избегать всеми способами, например в имени файла всегда и у всех должна быть его версия или даже хеш от данных).

p.s. у подавляющего большинства мелких проектов такого ада нет, зависимостей нет, версии линейные, обновления касаются сразу всех пакетов, в этом случае все вырождается в достаточно простую систему, и как я сказал libtorrent на клиенте может все разрулить более чем
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы