Как сделать чит-код для многопользовательской javascript-игры с учетом нагрузки на сервер - PullRequest
3 голосов
/ 05 марта 2019

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

Сейчас у меня есть базовое положение, которое работает довольно хорошо.Полностью встроен в Vue.js.Однако сейчас все решается на стороне клиента.В будущем я хотел бы использовать веб-сокеты, чтобы превратить это в многопользовательскую игру.Я понимаю, что было бы не совсем идеально, когда клиенты справляются со всем, потому что обманывать было бы очень легко.Мне было интересно, каким будет лучший способ противостоять этому.Моя игра чем-то напоминает космических захватчиков.Появляется много врагов, и вы должны стрелять в них.

Изначально я думал о том, чтобы иметь всю игровую логику на сервере и просто заставить клиента отображать вещи так, как того требует сервер.Но как это получится с высокой нагрузкой?Если 10000 игроков играют одновременно, это будет означать огромное количество запросов в секунду к серверу.Я думаю, это сильно повлияет на производительность игры.

Каковы лучшие практики, когда дело доходит до этого?Я бы хотел, чтобы все было как можно более надежно, но при этом помнить о высокой нагрузке и хорошо функционирующей игре.Я читал, что некоторые игры просто используют некоторую форму запутывания в отношении того, как рассчитывается счет, но, поскольку моя игра довольно проста, кажется, что запутывание не будет работать.Я включил скриншот текущей игры, чтобы дать вам представление о том, о чем я говорю.

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

С уважением.

1 Ответ

0 голосов
/ 05 марта 2019

Во-первых, TCP не подходит, если вы планируете синхронизировать тысячи пользователей, вам нужно использовать UDP , который является гораздо лучшим протоколом, чем TCP при работе с мультиплеером.

Во-вторых, вы правы, игровой движок должен работать и на сервере, а тактовая частота сервера должна быть на впереди тактовой частоты двигателя игрока (возможно, 200/500 мс) в Для проверки и прогнозирования ввода пользователя.

Затем, когда вы получаете ввод, вы можете проверить оба входа в момент его запуска (ваш движок уже прошел это игровое время) и проверить условие в следующие 200/500 мс, что позволяет при необходимости согласовать состояние клиента.

Многопользовательская предвидение и синхронизация данных сложная взгляните на уже имеющиеся реализации, такие как this или статьи на эту тему как this

Примечание. Дополнительные справочные материалы вы найдете в https://gamedev.stackexchange.com/

...