Як змусити багатокористувацьку гру надійно працювати за NAT?


20

Навіть ігри на 100% клієнт / сервер іноді виникають проблеми, коли клієнт стоїть за NAT. Пі-рі-ігри - це навіть більші проблеми. Деякі ігри потребують використання декількох транспортів (наприклад, UDP та TCP) або декількох з'єднань (наприклад, іншого UDP-порту для голосу).

Які існують способи переконатися, що гра працює надійно за NAT-роутером?

  • Peer-Peer: Не існує централізованого сервера. Гравець А розпочинає гру, а Гравець Б хоче приєднатися
  • Клієнт-сервер: Централізований сервер за відомою адресою (ім'я хоста) приймає всі вхідні з'єднання. Кожен клієнт спілкується лише з цим сервером.
  • Комбо: Там, де сервер проводить сватання, але оновлення гри є одноранговим. Різні однолітки можуть бачити кожного гравця з різним IP / портом потенційно (наприклад, деякі клієнти стоять за тим самим NAT, а деякі - на іншому маршрутизаторі)

Відповіді:


9

Метод, який найчастіше використовується, називається NAT пробиттям. Ось гідний вступ: http://www.mindcontrol.org/~hplus/nat-punch.html

Існує проект OSS принаймні для UDP: http://udt.sourceforge.net/index.html

RakNet теж підтримує перфорацію, я вважаю. Це комерційно, але має безкоштовну ліцензію "Інді". Дивіться тут: http://www.jenkinssoftware.com/

Гуглінг для "NAT punch" надасть вам більше матеріалів для читання


1
Я знаю, що це справді старе питання та відповідь, але якщо хтось читає це, RakNet отримує OculusVR і тепер відкритим кодом з двоклаповою ліцензією BSD. github.com/OculusVR/RakNet
Quad

9
  • Не повинен клієнт повідомляти сервер або однорангову інформацію про свою власну адресу. Іншими словами, не вкладайте IP-адресу клієнта A в ігровий пакет і не вимагайте, щоб клієнт B або сервер відповідали на цю адресу. Завжди відповідайте на адресу / порт, з якого походить повідомлення.

  • Мінімізуйте різні порти UDP або TCP, які використовуються для гри. Це полегшує налаштування правил NAT.

  • Дозвольте користувачеві замінити порт за замовчуванням, який використовується в грі. Таким чином декілька серверів можуть розміщуватися за одним NAT.

  • Задокументуйте порти та будь-які правила, яких вони дотримуються у вашій ігровій документації (спасибі за одну Zorba). У Descent 3 я пішов так, щоб створити самостійний тестовий додаток, який допоможе вам усунути проблеми з маршрутизатором або NAT-конфігурацією, надсилаючи пакети на тестовий сервер.

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

З UDP ви не знаєте, звідки походить повідомлення. Що-небудь можна написати у зворотній адресі.
MickLH

0

Поряд з іншими відповідями використовуйте наявне колесо: http://miniupnp.free.fr/ Ця бібліотека бореться майже з усіма роздратуваннями у функціональній формі, надаючи вам контроль над тим, коли і як вдарити та потягнути :)

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