Поиск пути. Сервер vs. клиент

Сеть в Unity3D

Поиск пути. Сервер vs. клиент

Сообщение EvgeniyT 12 фев 2011, 14:40

Имеется игровой сервер и куча игровых клиентов. Стоит серьёзный вопрос: как правилно считать путь? Смысл вопроса не в самом способе подсчёта, а где он должен считаться? Вариантов у нас немного: либо на сервере, либо на самом клиенте.

Подсчёт пути на сервере: возникает ряд проблем. Чтобы сервер мог адекватно расчитать путь для персонажа, он должен иметь точное представление всех объектов, все их координаты, точно высчитывать все столкновения и т.д. Если таких объектов в сцене 10000, при этом имеется 1000 клиентов, то любой сервер загнётся! Это ещё не беря в расчёт, что это будет трудно реализовать.

Подсчёт пути на клиенте: было бы замечательно, если каждый клиент считал бы для себя путь сам! Клиентское приложение само определяет все столкновения, находит подходящий путь, отправляет на сервер сообщение, что персонаж переместился по такому пути, и все радуются. Но тут имеется одна огромная проблема: неограниченная возвожность для читеров! Что если какой-нибудь умник залезет в клиентское приложение, внесёт туда некие поправки, и будет считать путь так, как ему это удобно. Будет гулять по воде, проходить сквозь деревья и всё в этом духе. Т.е. полагаться на вычисления клиента очень и очень опасно.

Может быть есть у кого идеи по этому поводу?
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Поиск пути. Сервер vs. клиент

Сообщение sp00n 12 фев 2011, 14:43

только на сервере
для снижение нагрузки нужно использовать техники для оптимизации - продумать левел-дизайн, расставить ключевые вейпоинты и пр. ну и технические оптимизации - использование многопроцессорности/ядерности, создавать кластера серверов и все такое)
главное заповедь для ммо - если на клиенте есть возможность считерить - считерят обязательно :)
Ты молод, креативен, талантлив?
Амбициозен, уверен в себе, полон свежих идей?
А делать хоть что-нибудь умеешь?!
sp00n
UNITрон
 
Сообщения: 254
Зарегистрирован: 27 фев 2010, 20:43

Re: Поиск пути. Сервер vs. клиент

Сообщение EvgeniyT 12 фев 2011, 14:48

sp00n писал(а):главное заповедь для ммо - если на клиенте есть возможность считерить - считерят обязательно :)


Именно по этому и возник такой вопрос.
Но мне сейчас даже трудно себе представить, какая же должна быть машина на сервере, чтобы считать пути при достаточно детализированной сцене, где размер карты может быть огромен, и объектов на ней может быть просто миллион! Там должна быть просто настоящая ракета!
Но с другой стороны, к сожалению, никакого альтернативного варианта я не нахожу.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Поиск пути. Сервер vs. клиент

Сообщение Neodrop 12 фев 2011, 14:57

Считайте на клиенте. А сервер пусть случайным образом, изредка проверяет расчёт клиентов. Если обнаружено несоответствие - бан. :D
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Поиск пути. Сервер vs. клиент

Сообщение EvgeniyT 12 фев 2011, 15:15

Neodrop писал(а):Считайте на клиенте. А сервер пусть случайным образом, изредка проверяет расчёт клиентов. Если обнаружено несоответствие - бан. :D


Вы серьёзно? Или это шутка?
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Поиск пути. Сервер vs. клиент

Сообщение Neodrop 12 фев 2011, 15:25

Я никогда не шучу на форуме.
Не нравится решение? :-? Дело ваше. Я же не знаю целей и задач вашего приложения.
И полегче со словарными оборотами. Я обидчивый. ;;)
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Поиск пути. Сервер vs. клиент

Сообщение EvgeniyT 12 фев 2011, 15:43

Neodrop писал(а):Я никогда не шучу на форуме.

Хорошо, учту.

Neodrop писал(а):Не нравится решение? :-? Дело ваше. Я же не знаю целей и задач вашего приложения.

хм...впринципе думаю из этого может получиться что-нибудь стоющее, всё же большое спасибо за совет.


Neodrop писал(а):И полегче со словарными оборотами. Я обидчивый. ;;)

Извините, не хотел никого обидеть! :ymsigh:
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Поиск пути. Сервер vs. клиент

Сообщение Neodrop 12 фев 2011, 16:21

Ещё вариант - чекать максимально допустимую дистанцию. Это быстро и дёшево.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Поиск пути. Сервер vs. клиент

Сообщение stash 12 фев 2011, 17:45

Вот здесь на основном форуме Unity я описывал, что я придумал
http://forum.unity3d.com/threads/71103- ... chitecture

Я назвал это "Доверяй но проверяй". Я писал это для мультиплеерного шутера и основной смысл был в том, чтобы снизить пинг путем просчета столкновений на клиенте, но также это дает снижение нагрузки на сервер.

Смысл в следующем. Допустим есть 30 клиентов и один сервер. Каждый клиент просчитывает все, что относится к нему и немедленно применяет, то что он просчитал на практике, а также отсылает еще двум другим клиентам входные условия (то есть инпут от игрока). Эти два клиента проверяют, что насчитал клиент и постоянно посылают на сервер "проверяемый клиент не читер". Как только хоть один клиент выдает, что "проверяемый клиент возможно читер", тут же путь для этого клиента начинает рассчитывать сервер.

Задача сервера динамически присваивать проверяющих для каждого игрока. И рассчитывать путь для "подозреваемого".
stash
UNец
 
Сообщения: 5
Зарегистрирован: 26 дек 2010, 22:47

Re: Поиск пути. Сервер vs. клиент

Сообщение Neodrop 12 фев 2011, 18:35

Да, я бы поступил так же. Вообще, обожаю использовать клиентов для таких проверок. ;)
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Поиск пути. Сервер vs. клиент

Сообщение BlackMamba 12 фев 2011, 18:40

Neodrop писал(а):Считайте на клиенте. А сервер пусть случайным образом, изредка проверяет расчёт клиентов. Если обнаружено несоответствие - бан. :D

а че - хорошая идея, слегка доработать и будет шик-блеск, сделать проверку всех клиентов не рандомно, а по очереди, если планируется большой онлайн, скажем 500, то под расчет-проверку потребуется в 500 раз меньше ресурсов серва, чем считать все перемещения на сервере, ну сколько займет время проверки 500 клиентов? ну, скажем 3-5 минут, поймаете читера не сразу, но за 5 минут, я еще не видел игр такого асштаба, в которых за 5 минут 1 читер решит исход крупного махача, но просто кика не достаточно будет, да, надо бан, по-любому бан :D ...
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва

Re: Поиск пути. Сервер vs. клиент

Сообщение Kann 12 фев 2011, 20:58

EvgeniyT писал(а):Может быть есть у кого идеи по этому поводу?

насколько я понял игра у вас поин-клик ?, в таком случае считайте путь на клиенте, а коллизии на сервере, как пример, клиент рассчитал путь до точки, отослал информацию серверу, сервер двигает игрока, ударился в стенку = остановился, возможности для хождения сквозь стены отсутствуют
Kann
Старожил
 
Сообщения: 553
Зарегистрирован: 05 ноя 2009, 14:06

Re: Поиск пути. Сервер vs. клиент

Сообщение EvgeniyT 12 фев 2011, 21:32

Kann писал(а):считайте путь на клиенте, а коллизии на сервере

Вся беда в том, что сервер не знает ни о какой Unity. Он даже не знает, что такое третье измерение. Сервер знает об объектах сцены не более, чем можно получить из Collider.bounds, ещё и отбросив высоту. Именно по этому в моём случае расчёт пути на сервере - неоправданно сложная задача.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Поиск пути. Сервер vs. клиент

Сообщение EvgeniyT 12 фев 2011, 21:38

stash писал(а):Вот здесь на основном форуме Unity я описывал, что я придумал
http://forum.unity3d.com/threads/71103- ... chitecture

Я назвал это "Доверяй но проверяй". Я писал это для мультиплеерного шутера и основной смысл был в том, чтобы снизить пинг путем просчета столкновений на клиенте, но также это дает снижение нагрузки на сервер.

Смысл в следующем. Допустим есть 30 клиентов и один сервер. Каждый клиент просчитывает все, что относится к нему и немедленно применяет, то что он просчитал на практике, а также отсылает еще двум другим клиентам входные условия (то есть инпут от игрока). Эти два клиента проверяют, что насчитал клиент и постоянно посылают на сервер "проверяемый клиент не читер". Как только хоть один клиент выдает, что "проверяемый клиент возможно читер", тут же путь для этого клиента начинает рассчитывать сервер.

Задача сервера динамически присваивать проверяющих для каждого игрока. И рассчитывать путь для "подозреваемого".


Очень интересно, спасибо!
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Поиск пути. Сервер vs. клиент

Сообщение Kann 12 фев 2011, 23:36

EvgeniyT писал(а):Вся беда в том, что сервер не знает ни о какой Unity. Он даже не знает, что такое третье измерение. Сервер знает об объектах сцены не более, чем можно получить из Collider.bounds, ещё и отбросив высоту. Именно по этому в моём случае расчёт пути на сервере - неоправданно сложная задача.


ну так и что ? сервер знает что перед игроком есть препятствие правильно ? он же получает данные об игровых объектах как вы пишите через Collider.bounds, так вот и проверяйте столкновение игрока с игровым объектом на сервере, а расчет пути пусть делает клиент, какая разница хакнут клиент или нет ? если на сервере персонаж уткнется носом в стену то он дальше не уйдет.
Kann
Старожил
 
Сообщения: 553
Зарегистрирован: 05 ноя 2009, 14:06

След.

Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2