Nota: Esta es una pregunta sobre redes, no juegos. Estoy usando StarCraft simplemente como ejemplo.
El juego StarCraft (no StarCraft 2) admite el juego en línea. Una persona anfitriona, y otras personas se unen. Si el anfitrión se va durante el juego, el juego puede continuar indefinidamente sin el anfitrión. ¿Cómo funciona eso?
Considere el siguiente escenario:
- Tengo 3 en lugar de 3. Tenga en cuenta que, para que las personas puedan unirse, mi enrutador debe configurarse para enviar hacia adelante 6112, TCP y UDP (consulte Soporte de Blizzard ).
- Cinco personas se unen. Todos (yo mismo incluido) está detrás de un enrutador. Comienzo el juego.
- A los tres minutos de juego, unos veinte fanáticos entran a mi base. Nadie me ayuda.
- Se eliminó mi base, por lo que me voy (el juego no te da una opción).
- El juego continúa sin el anfitrión (al equipo local le quedan dos jugadores).
¿Cómo permanecen conectados los cinco clientes restantes (que no necesitaban 6112 reenviados)?
Si entiendo correctamente: si dos programas quieren hablar entre sí, uno de ellos debe ser un "servidor" y escuchar las conexiones en un puerto, mientras que el otro debe ser un "cliente" e iniciar una conexión solicitud en ese puerto. No pueden simplemente comenzar a enviar paquetes entre ellos (y ni siquiera sé cómo lo harían, si ambos están detrás de los enrutadores).
Alguien que organiza un juego es un servidor, mientras que aquellos que se unen son clientes. Es fácil ver cómo los clientes pueden comenzar a comunicarse con el servidor. Lo que no entiendo es: ¿cómo comienzan a comunicarse los clientes sin pasar por el servidor? ¿El Protocolo de Internet permite que un servidor inicie conexiones entre clientes?
Es completamente posible que, en el caso de StarCraft, el tráfico de juegos pase a través de los servidores de Battle.net. StarCraft mantiene una conexión con Battle.net durante los juegos (para mensajes de amigos, etc.). Sin embargo, dudo que el tráfico del juego lo atraviese, porque si lo hiciera, ¿por qué los hosts necesitarían portor 6112?
Mi pregunta es: ¿puede un servidor, con varios clientes conectados, iniciar conexiones entre ellos?