Дизайн ігрового двигуна: багатокористувацькі та прослуховувальні сервери [закрито]


10

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

Я з'ясував, що багато ігор насправді не мають реального режиму одиночної гри, але, граючи в самоті, ви фактично хостите і локальний сервер, і майже все працює так, як якщо б ви були в мультиплеєрі (за винятком того, що пакети даних можна передавати для альтернативного маршруту для кращої роботи)

Моєму двигуну знадобиться капітальний рефакторинг для адаптації до цієї моделі. Існує три можливі режими: виділений клієнт, виділений сервер і клієнт-сервер (режим прослуховування)

  • Як часто модель прослуховування-сервера використовується в ігровій індустрії?
  • Які (не) переваги цього?
  • Які ще є варіанти?

4
Перше питання досить не має значення. Чому має бути важливо, як це робить галузь? Вони не роблять все найкращим чином.
Качка комуніста

Відповіді:


11

Я побачу, чи зможу я відповісти на це найкращим чином:

Як часто модель прослуховування-сервера використовується в ігровій індустрії?

Якщо мова йде про більшість онлайн-ігор, ви побачите, що більшість ігор використовує архітектуру клієнт-сервер, хоча не завжди так, як ви думаєте. Візьмімо, наприклад, будь-яку гру Source. Більшість використовуватиме стандартний клієнт-сервер з основною архітектурою сервера (для переліку доступних ігор), оскільки одна людина буде розміщувати виділений сервер, і будь-хто з клієнтом може приєднатися до нього.

Однак у вас є деякі ігри та послуги, наприклад, Left 4 Dead, League of Legends та деякі ігри XBox Live, які мають дещо інший підхід. Усі вони використовують архітектуру клієнт-сервер з керуючим сервером. Основна ідея тут полягає в тому, що хтось створює виділений сервер, який не «працює» жодною грою. Контролюючий сервер створить своєрідне "лобі", і коли гра буде запущена, керуючий сервер додасть їх до черги, а коли настане черга лобі, він вибере відповідний виділений сервер (з точки зору розташування / швидкість, доступність, численні фактори) та призначте гравців на цьому сервері. Тільки тоді сервер фактично «запустить» гру. Це та сама ідея, але трохи спрощена, оскільки клієнту не потрібно "вибирати" сервер,

Звичайно, найбільша модель клієнт-сервер - це модель MMO, де на одному або багатьох серверах працює стійкий світ, який обробляє майже всі дані та логіку. Деякі з найбільш відомих ігор, що використовують цю модель, - World of Warcraft, Everquest, щось подібне.

То де тут вміщується сервер прослуховування? Якщо чесно, не дуже добре, однак, ви все одно знайдете багато ігор, використовуючи його. Наприклад, більшість джерел ігор дозволяють створювати сервери для прослуховування, і багато ігор XBox Live роблять (минув час, але я вважаю, що зробив Counter Strike, а також Quake 4 та багато інших). Взагалі, однак, вони здаються нахмуреними через переваги моделі клієнт-сервер, що приводить нас до наступного моменту.

Які (не) переваги цього?

Перше і головне: виконання. У моделі клієнт-сервер клієнт буде обробляти локальні зміни (такі як введення, графіка, звуки тощо) на кожному циклі гри. В кінці циклу він запакує відповідні дані (наприклад, чи рухався гравець? Якщо так, куди? Куди зараз він дивиться? Швидкість? Чи стріляли? Якщо так, інформація про кулю. Etc) та надішліть його на сервер для обробки. Сервер візьме ці дані і визначить, чи кожна річ є дійсною, наприклад, чи рухається користувач таким чином, що вказує на злому (про це пізніше пізніше), чи хода є дійсною (що в дорозі?), Чи зробила куля від гравця 1 удар гравця 2 ?, та більше. Потім сервер пакує це, і відправляє його клієнтам, які потім оновлюють все необхідне, наприклад, коригування стану здоров’я, якщо гравець був застрелений, удари гравця, якщо визначено, що вони хакують тощо.

Однак сервер прослуховування повинен вирішувати все це одночасно. Оскільки я припускаю, що ви знайомі з програмуванням, ви, мабуть, усвідомлюєте, яку потужність гра може позбавити комп'ютера, особливо погано розробленого. Додаючи обробку мережі, обробку безпеки тощо , а також гру клієнта, ви можете побачити, де продуктивність спричинить серйозне враження, принаймні, що стосується лише стандартної обробки. Крім того, більшість серверів працює в швидких мережах і є серверами, призначеними для протистояння мережевому трафіку. Якщо мережа сервера прослуховування повільна, вся гра постраждає.

По-друге, безпека , як було сказано раніше, однією з головних речей, яку сервер повинен зробити, - це визначити, чи грає користувач грою. Можливо, ви бачили їх як Punkbuster, VAC тощо. Існує дуже складний набір правил, які виконують ці програми, наприклад, визначаючи різницю між хакером і просто дуже хорошим гравцем. Було б дуже погано для вашої гри, якби ви не змогли зловити хакерів, але ще гірше, якщо б ви виконали дії проти фальшиво звинуваченого.

Сервер прослуховування, як правило, не зможе впоратися з грою клієнта, обробкою сервера та виявленням зламу, і в більшості випадків детектори типу Punkbuster дуже важкі, якщо не неможливі, щоб запустити на сервер прослуховування, тому що це важко для нього правильно функціонувати без необхідної потужності обробки, оскільки в цілому логіка гри надає пріоритет безпеці, і якщо детектору не дозволено обробляти один кадр, він може втратити дані, необхідні для когось засудження.

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

На сервері прослуховування головним недоліком є ​​те, що як тільки клієнт, який розміщує сервер прослуховування, відійде, гру потрібно або перенести до іншого гравця (створивши приспів у грі, який у деяких випадках може тривати хвилини), або повинен закінчитися повністю . Це не бажано на великому сервері, оскільки хост повинен або залишатися в Інтернеті (витрачаючи слот на сервері, і його / її комп'ютер, що також може уповільнити гру), або закінчити гру для всіх.

Однак, незважаючи на ці проблеми, сервери прослуховування мають ряд переваг.

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

Добре для тестування : Якщо хтось має спеціалізований сервер і бажає змінити його конфігурацію, це, як правило, краща ідея для тестуванняконфігурація спочатку. Користувачеві або доведеться створити резервну копію виділеного сервера і сліпо вносити зміни, єдиний варіант - відкотитись, якщо щось піде не так, створити новий виділений сервер для тестування, просто створити простий сервер прослуховування, щоб перевірити їх. І в пункті 1, це, як правило, простіше запустити та налаштувати. Це особливо актуально, оскільки більшість виділених серверів не перебувають у безпосередньому доступі адміністраторів (більшість виділених серверів знімаються з віддаленого місця). На зміну конфігурації, а також команд для перезапуску тощо на віддалене місце потрібно зайняти набагато більше часу, ніж на машині, на якій зараз знаходиться адміністратор.

Менше ресурсів : на більшості виділених серверів користувач з тим самим IP не може підключитися до виділеного сервера (тобто клієнт повинен або розмістити сервер, або грати, вони не можуть робити і те і інше). Якщо клієнт бажає грати на своєму власному сервері, йому зазвичай знадобиться друга машина для розміщення сервера або придбання або прокат виділеного сервера, щоб вони могли насправді грати на ньому. Сервер прослуховування вимагає лише однієї машини, що може бути єдиним клієнтом.

У будь-якому випадку обидва мають переваги та недоліки, і вам потрібно зважити їх з тим, що ви готові розробити та впровадити. Зі свого досвіду, я вважаю, що якби ви впровадили сервер прослуховування, він звик би, якщо не для кількох користувачів, які бажають пограти з друзями, або перевірити налаштування.

Нарешті:

Які ще є варіанти?

Це промислова банка глистів. Насправді до відеоігор можна застосувати будь-який тип мережевої архітектури. Однак, із того, що я бачив, як і більшість комунікацій в Інтернеті, більшість зводиться до якоїсь форми моделі клієнт-сервер.

Будь ласка, дайте мені знати, якщо я не відповів на ваше запитання чи вам потрібно щось розширити, і я побачу, що я можу зробити.


"У більшості виділених серверів користувач з тим самим IP не може підключитися до виділеного сервера (тобто клієнт повинен або розмістити сервер, або грати, вони не можуть робити і те й інше)." ВАТ? Де? Чому? Якщо деякі сервери мають це, мабуть, безглуздо довільне обмеження, це не означає, що він був би змушений зробити те саме, коли пише одне ...
o0 '.

Це артефакт старих ігор, коли комп'ютери не могли обробляти серверні алгоритми, графічні обчислення та логіку гри відразу. Багато виділених серверних моделей запобігли б успішному з'єднанню клієнта, який намагався підключитися з тієї ж машини, і ця практика досі застосовується в деяких іграх. Я ніколи не казав, що це стосується всіх моделей, ні я не казав, що йому довелося моделювати його саме до цієї парадигми. Однак технічно, якщо дозволити з'єднання з одним хостом, перемагає призначення виділеного сервера, і єдина перевага - це залишати сервер активним після відключення.
shmeeps
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.