Я читал статью Valve о многопользовательских сетях, которая была адаптирована из статьи Яна Бернье 2001 года « Методы компенсации задержки» в разработке и оптимизации внутриигрового протокола клиента / сервера . Я делаю многопользовательскую игру в реальном времени, используя сервер node.js, подключенный к клиентам через socket.io, и у меня есть несколько вопросов относительно принципов, подробно описанных ниже:
Интерполяция сущностей
[Интерполяция] предотвращает дрожание движения, к которому это обычно приводит, буферизируя обновления сервера, а затем воспроизводя их с промежутками, плавно интерполируемыми между ними. Он также может защитить от сбоев, вызванных потерей пакета.
Прогнозирование на стороне клиента
Предсказание - это понятие клиента, предсказывающее последствия действий локального игрока, не дожидаясь, пока сервер подтвердит их. Предсказанное состояние объекта проверяется на соответствие серверным командам до тех пор, пока не будет обнаружено совпадение или несоответствие.
Компенсация отставания
Компенсация запаздывания - это понятие сервера, использующего задержку игрока для перемотки времени при обработке [ввода пользователя], чтобы увидеть то, что увидел игрок при отправке команды. В сочетании с прогнозированием, компенсация задержки может помочь в борьбе с задержкой в сети до такой степени, что почти исключает ее с точки зрения злоумышленника.
Применяются ли принципы к TCP так же, как к UDP, и будут ли какие-либо различия в реализации? Я могу видеть, что интерполяция объекта не должна была бы защищать от потери пакета, но это об этом.
Могу ли я даже общаться между сервером и веб-браузером и наоборот, используя UDP и Node.js?
Поскольку работе уже более десяти лет, эти принципы все еще используются или появились другие технологии?
Любая помощь приветствуется.
Ответы:
источник
Вы должны проверить эту статью о многопользовательских играх в реальном времени в HTML5, опубликованную на сайте buildnewgames.com Свеном Бергстромом, он рассказывает о тех же вещах и использует Node.JS. У меня что-то подобное происходит самому. Я только сейчас исследую больше о предсказании и интерполяции на стороне клиента и тому подобное, прежде чем пытаться решить остальную часть этого.
Я считаю, что это определенно возможно сделать с помощью Socket.IO и Node, однако технология все еще нова, поэтому в руководстве по внедрению будет мало документации и практически ничего. Я бы порекомендовал делать то, что я делаю, и изучать предмет очень подробно в абстрактных терминах высокого уровня, а затем попытаться реализовать это самостоятельно.
источник
Я считаю, что технология почти такая же. Кроме того, понятия не зависят от того, какой язык вы используете или используете ли вы UDP или TCP. Я написал очень подробное объяснение всего этого здесь http://www.gabrielgambetta.com/fpm1.html , включая симпатичные диаграммы :)
источник