Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Алгоритм Real-time Multiplayer (2 стр)

Алгоритм Real-time Multiplayer (2 стр)

Страницы: 1 2
Sh.Tac.Постоялецwww29 мая 201815:28#15
Zab
> если не применять всяких хитростей
это не хитрости, а норма жизни : )
если у тебя квадратичная рассылка, то явно не продакшн код

З.Ы. собственно некоторые оптимизации ещё с бф-4
https://www.youtube.com/watch?v=KJoKn42j6W8

Правка: 29 мая 2018 20:37

BishopПостоялецwww30 мая 20181:02#16
Да уж, тема чисто поржать...
ELena_ShloemovichПользовательwww30 мая 20182:03#17
nikotinign3D
> У них в игре было больше 300000 игроков.

В игре CS - обычно от 2 до 64 игроков на одной локации - карте. На одном сервере запущена 1 карта (иногда несколько).

Число серверов велико - тысячи - каждый игрок может запустить свой сервер.
(на своём компьютере, или арендовать сервер и там запустить выделенный, или арендовать готовый сервер с игрой)


Конечно, у компании Valve есть свои серверы для сбора статистики с игровых серверов - результатов матчей.
Но там тема нагрузки - несколько иная.


nikotinign3D
> физика в таком случае должна зависеть только от времени (с момента нажатия на кнопку)

Звучит разумно.
А как выяснить это время - для каждого кадра - ведь игрок может подменить - читеры повсюду :)


Вообще - тут нет правильного решения. Только поиск компромиссов.
Каждая компания выбирает для себя - вот это лучшее решение.


В той же CS бывает так:
- стреляешь в голову противнику, вроде бы хэдшот, даже анимация падения проигрывается
- потом картинка дёргается, и противник бегает как ничего не было

А всё потому, что Valve написала удивительно наркоманский алгоритм лаго компенсации.
Сервер как бы прокручивает время назад - проверяя кто раньше высунулся из-за угла, а кто раньше выстрелил.

BiomanПостоялецwww7 июня 201819:54#18
nikotinign3D
> Интересно как такую проблему решает csgo
> https://store.steampowered.com/app/730/CounterStrike_Global_Offen…
> ve/?l=russian ? У них в игре было больше 300000 игроков. Если на одном сервере
> <10000 игроков то это уже минимум 30 серверов.
У них и нет одного сервера,там все на кластерах. Мастер сервер только кол-во считает и отчасти делает переадресацию,сами игровые сервера работают отдельно и по сути особо не пересекаются. Да и никто не будет пытаться много загнать на один физический сервер,даже со всеми оптимизациями тупо трафиком весь канал забьет и тормоза будут. Нагрузку делят. Городить колхоз смысла нет - слишком много факторов,разработка по умолчанию получится сильно дороже,чем обыкновенная реализация дополнительных серверов/кластеров.
nikotinign3DПостоялецwww15 июня 20187:49#19
Tiendil
> По реализации, как-то так:
>
> - физику логики считает и клиент и сервер
Почему тона всех форумах все сходятся на мнение, что физику рил тайм должен сервер считать. Почему? В чем сложность сделать такую физику, которая ведет себя одинаково на разных устройствах? Сделать зависимость от времени (и только от времени -точки отсчета физического мира) и все. Не важно какой проц, карта, фпс и все остальное - на пятой секунде физическое тело будет находится у всех на одном и том же месте. Зачем нагружать и без того нагруженный сервер, когда все это могут сделать клиенты (им ток время физического мира надо знать)?
DelfigamerПостоялецwww15 июня 20188:21#20
nikotinign3D
> В чем сложность сделать такую физику, которая ведет себя одинаково на разных
> устройствах?
А в чём смысл использовать физику там, где можно вообще просчитать всё заранее и запечь в анимацию?

Правка: 15 июня 2018 8:21

TiendilУчастникwww15 июня 20188:46#21
nikotinign3D
> В чем сложность сделать такую физику, которая ведет себя одинаково на разных устройствах
В том, что её реальо сложно сделать. Начиная с того, что float и double могут вести себя по-разному на разных процессорах и заканчивая тем, что время тоже может тикать по-разному. Не говоря уже о возможности договорных матчей, если игроки смогут выбирать команды.

Физика на сервере - идеальный случай. К этому стремятся, но архитектуру выбирают из возможностей команды, её ресурсов, особенностей логики.

TiendilУчастникwww15 июня 20188:48#22
То есть, это нормально делать физику не на сервере. Но надо изучить, какие конкретно проблемы могут возникнуть и как их решать. Например, что делать если во время реализа игры окажется, что у 10% пользователей в глубинах физики накапливается ошибка расчёта, а на машинах разработчиков это не воспроизводится.
Sh.Tac.Постоялецwww15 июня 201812:47#23
nikotinign3D
> нагружать и без того нагруженный сервер
это чем он нагружен? : )
TiendilУчастникwww15 июня 201812:58#24
Sh.Tac.
> это чем он нагружен?
Ой, да ладно :-) Был бы сервер, чем нагрузить найдётся.
Sh.Tac.Постоялецwww15 июня 201814:13#25
Tiendil
> чем нагрузить найдётся
физика как раз отличная "разминка" для CPU, чем его ещё нагружать не представляю : )
а ещё если на сервере вдруг есть GPU вообще труба, случай конечно редкий

Правка: 15 июня 2018 14:18

TiendilУчастникwww15 июня 201814:29#26
>чем его ещё нагружать не представляю
Пару сот тысяч запросов в минуту к API с json-ками, например.
Либо какой-нибудь хитрый расчёт рейтинга/турнира для 1-10 миллионов игроков.
Умное распределение игроков по матчам тоже может неплохо проц выесть.

Была бы фантазия.

Sh.Tac.Постоялецwww15 июня 201814:46#27
а, ну я примерно так и думал, взять крайне непроизводительные технологии,
нет можно конечно и трафик зиповать, не спорю : )
DelfigamerПостоялецwww15 июня 201817:31#28
Tiendil
> Пару сот тысяч запросов в минуту к API с json-ками, например.
> Либо какой-нибудь хитрый расчёт рейтинга/турнира для 1-10 миллионов игроков.
Это не тот сервер, о котором здесь говорят. Здесь речь идёт о хосте игровой сессии. Он такими делами не занимается.

Правка: 15 июня 2018 17:32

Страницы: 1 2

/ Форум / Программирование игр / Сеть

2001—2018 © GameDev.ru — Разработка игр