Nota: Esta es una pregunta sobre redes, no juegos. Estoy usando StarCraft simplemente como un ejemplo.
El juego StarCraft (no StarCraft 2) admite el juego en línea. Una persona aloja 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?
Considere el siguiente escenario:
- Tengo un 3 contra 3. Tenga en cuenta que, para que las personas puedan unirse, mi enrutador debe estar configurado para reenviar puertos 6112, TCP y UDP (consulte Soporte de Blizzard ).
- Cinco personas se unen. Todos (incluido yo mismo) están detrás de un enrutador. Yo comienzo el juego.
- Tres minutos después del juego, unos veinte fanáticos se vierten en mi base. Nadie me ayuda.
- Mi base es eliminada, así que me voy (el juego no te da opción).
- El juego continúa sin el anfitrión (el equipo local tiene dos jugadores restantes).
¿Cómo permanecen conectados los cinco clientes restantes (que no necesitaron reenviar 6112)?
Si entiendo correctamente: si dos programas quieren comunicarse 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 solicitud de conexión en ese momento. Puerto. No pueden simplemente comenzar a enviarse paquetes entre sí (y ni siquiera sé cómo lo harían, si ambos están detrás de los enrutadores).
Alguien que aloja un juego es un servidor, mientras que los 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 los clientes a comunicarse entre sí 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 del juego pase por 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 tendrían que reenviar el puerto 6112?
Mi pregunta es: ¿puede un servidor, con varios clientes conectados a él, iniciar conexiones entre ellos?
fuente
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).
Aparentemente esto es necesario para iniciar un juego para que los usuarios puedan encontrarte, pero no es necesario que permanezcas conectado.Respuestas:
Eso suena como perforar UDP
En este ejemplo, eres S. Tus oponentes son A y B. Cuando te expulsan del juego, tus oponentes pueden continuar jugando porque habían negociado una conexión entre ellos cuando se conectaron por primera vez contigo.
fuente
Si dos programas quieren comunicarse entre sí, uno no necesita ser un servidor y el otro un cliente. Ese es un modelo de redes, pero no el único. Otro modelo muy común es el modelo peer-to-peer , donde todos son clientes y servidores y cualquiera puede hablar con cualquiera. No sé demasiado específicamente sobre los componentes internos de redes multijugador de Starcraft, pero supongo que lo más probable es que logre lo que usted describió al usar un modelo de igual a igual.
fuente