Принципи дизайну гри в режимі реального часу для Node.js


12

Я читав статтю Valve про багатокористувацьку мережу, яка була адаптована з документа Яна Яньє Берньє 2001 року під назвою Методи компенсації затримки в проектуванні та оптимізації протоколу клієнта / сервера в грі . Я роблю багатокористувацьку гру в реальному часі за допомогою сервера node.js, підключеного до клієнтів через socket.io, і у мене є кілька питань стосовно докладно описаних нижче принципів:

Інтерполяція суб'єктів господарювання

[Інтерполяція] перешкоджає рухомому руху, до якого зазвичай призводить буферизація оновлень сервера, а потім відтворення їх назад із проміжками, плавно інтерпольованими між ними. Він також може захистити від збоїв, викликаних втратою пакету.

Прогнозування на стороні клієнта

Прогнозування - це поняття, що клієнт прогнозує наслідки дій локального гравця, не чекаючи, коли сервер їх підтвердить. Передбачуваний стан суб'єкта перевіряється на серверні команди, коли вони надходять, поки не буде виявлено або збіг, або невідповідність.

Компенсація відставання

Компенсація затримки - це поняття сервера, що використовує затримку гравця, щоб перемотати час під час обробки [введення користувача], щоб побачити, що гравець бачив, коли команда була відправлена. У поєднанні з прогнозуванням компенсація відставання може допомогти боротися із затримкою мережі до того, що майже усуне її з точки зору зловмисника.

  • Чи застосовуються принципи до TCP, як це стосується UDP, і чи будуть різниці у впровадженні? Я можу бачити, що інтерполяція сутності не потребує захисту від втрати пакетів, але це стосується цього.

  • Чи можу я навіть спілкуватися між сервером та веб-браузером і навпаки, використовуючи UDP та Node.js?

  • Оскільки цей документ є старшим десятиліттям, ці принципи все ще застосовуються чи з'явилася інша технологія?

Будь-яка допомога буде дуже вдячна.


1
Насправді вам не потрібен UDP для багатокористувацьких ігор, всупереч поширеній думці. Вчіться у кращих; WoW використовує TCP, і я вважаю, що багато інших багатокористувацьких ігор AAA роблять. Люди просто дотримуються деяких порад, а потім проводять наступні 5 місяців, впроваджуючи погану та повільну версію TCP!
jcora

1
(Якщо, звичайно, ви не впевнені, що у вас є знання та ресурси для розробки гідного протоколу UDP, який міг би використати його переваги.)
jcora

1
Жодні ігри AAA FPS не використовують TCP. Це справді занадто повільно для ігор, які потребують оновлення в режимі реального часу. Але оскільки він не пише екшн-гри, він повинен мати можливість піти з TCP.
Брендан Лесняк

@Yannbane Не знав, що WoW використовує TCP. Здається, що багато ММО роблять, з чого я міг знайти. Робить мене набагато впевненішим у написанні багатокористувацьких ігор з HTML5. Дякую!
дрета

Відповіді:


6
  • Принципи зниження ефектів відставання однакові незалежно від транспортного протоколу. Втрата пакетів - це ще одна тема - для багатьох видів пакетів втрата деяких не є критичною, оскільки наступне оновлення, ймовірно, вже на шляху - тут UPD має перевагу, але коли вам потрібно переконатися, що певний пакет доставлений, вам потрібен спеціальний код підтвердження для цього з UDP
  • Node.js підтримує UDP, але веб-браузери не роблять (без плагінів). Найкращий спосіб спілкування між ними в режимі реального часу - це веб-сокети, які в основному є TCP. Але для спілкування ви можете використовувати Socket.IO, який забезпечує резервні копії для браузерів, які не підтримують веб-розетки.
  • Принципи залишаються тими ж.

1
Я думаю, це застаріло - WebRTC має стати способом використання UDP-подібного зв'язку, чи не так?
Микола Ценков

4

Ви повинні ознайомитись із цією статтею про ігри для кількох гравців в реальному часі в HTML5, розміщеній на сайті buildnewgames.com Свен Бергстром, він розповідає про ті самі речі і використовує Node.JS. У мене щось подібне відбувається саме я. Я тільки зараз досліджую більше про передбачення та інтерполяцію на стороні клієнта і подібне до себе, перш ніж намагатися вирішити решту цього.

Я вважаю, що це точно можна зробити за допомогою Socket.IO та Node, однак технологія все ще нова, тому документація і мало нічого в шляху керівництва по впровадженню. Я б рекомендував робити те, що я роблю, і вивчати цю тему дуже детально в абстрактних термінах високого рівня, а потім спробувати реалізувати це самостійно.


1

Я вважаю, що технологія майже однакова. Крім того, поняття не залежать від того, якою мовою ви користуєтесь, чи ви робите UDP або TCP. Я написав дуже детальне пояснення всієї справи тут http://www.gabrielgambetta.com/fpm1.html , включаючи гарні схеми :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.