Примітка. Це питання щодо мереж, а не ігор. Я використовую StarCraft лише як приклад.
Гра StarCraft (не StarCraft 2) підтримує онлайн-гру. Одна людина приймає, а інші приєднуються. Якщо господар відходить під час гри, гра може тривати нескінченно без господаря. Як це працює?
Розглянемо наступний сценарій:
- Я розміщую 3 проти 3. Зверніть увагу, що для того, щоб люди могли приєднатися, мій маршрутизатор повинен бути налаштований для пересилання вперед 6112, TCP та UDP (див. Підтримка Blizzard ).
- П’ятеро людей приєднуються. Усі (включаючи мене) стоять за маршрутизатором. Я починаю гру.
- Через три хвилини гри в мою базу вилилося близько двадцяти завзятих. Ніхто мені не допомагає.
- Моя база ліквідована, тому я залишаю (гра не дає тобі вибору).
- Гра продовжується без господаря (у господарів залишилось два гравці).
Як залишаються підключені решта п'ятьох клієнтів (яким не потрібно було переадресувати 6112)?
Якщо я правильно розумію: якщо дві програми хочуть розмовляти між собою, одна з них має бути "сервером" і прослуховувати з'єднання через порт, а інша повинна бути "клієнтом" і ініціювати запит на з'єднання з цього приводу. порт. Вони не можуть просто почати надсилати пакети один одному (і я навіть не знаю, як би вони були, якщо обидва стоять за маршрутизаторами).
Хтось, хто розміщує гру, є сервером, а ті, хто приєднується до неї, - це клієнти. Неважко зрозуміти, як клієнти можуть почати спілкуватися з сервером. Що я не отримую: це як клієнти починають спілкуватися один з одним, не проходячи через сервер? Чи дозволяє Інтернет-протокол серверу ініціювати з'єднання між клієнтами?
Цілком можливо, що у випадку StarCraft ігровий трафік проходить через сервери Battle.net. StarCraft підтримує з'єднання з Battle.net під час ігор (для повідомлень друзів тощо). Однак я сумніваюся, що ігровий трафік проходить через нього, тому що якщо це так, то чому б хости повинні перенести вперед 6112?
Моє запитання: чи може сервер із кількома клієнтами, підключеними до нього, ініціювати з'єднання між ними?
I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).
Мабуть, це потрібно для початку гри, щоб користувачі могли вас знайти, але не потрібно залишатися на зв’язку.