Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Multijugador online ¿Sin necesidad de un servidor intermediario?

Iniciado por Feider, Septiembre 10, 2017, 04:09:17 PM

Tema anterior - Siguiente tema
Buenos días:
 
 
 
Estoy desarrollando un juego en equipo y nos vimos al siguiente problema:
 
Queremos hacer un multijugador con amigos conocidos. Es decir, yo creo una partida, y en lugar de un host online que las conecta, es el propio pc de uno de los jugadores. Los otros se conectarían a ese pc. Como si fuera un juego en Local, pero de manera online (Cada uno desde su casa). 
 
Estuve mirando un poco por internet y se recomendaba photon, pero al ver photon usaba un sistema de conexión tipo anfitrión en la red o eso estuve entendiendo... 
 
Mi problema es que ya he llegado a un punto que no sé exactamente cómo buscar o qué buscar para obtener lo que deseo conseguir...
 


¿Es muy descabellado o estoy entendiendo algo mal o si o si hay que tener un servidor en la nube que enlace esas partidas? ¿Cómo podría hacerlo o por dónde podría empezar?
 
En caso de un servidor si o si ¿Valdría cualquiera o se necesita si o si uno especializado?
 
 
 
Un saludo y gracias de antemano.
 
 

El gran problema de usar directamente un cliente como servidor para juegos Online fue todas las variantes que existen, router, SO, FireWalls, IPS que bloquean puertos, IP no publicas y otros factores que hicieron que nacieran los Relay Server.
 
Un Relay Server es un servidor corriendo en una IP pública que se encarga de manejar los datos que se envían y reciben. Algo parecido a Hamachi.
 
Si tienes una IP publica y quieres montar un servidor de tu juego sin MASTER SERVER entonces los clientes deberán de especificar la IP y Puerto del server, de lo contrario sería imposible.
 
 
 
Para entender un poco el tema podrias programar un Chat por consola con TcpListener y TcpClient e intentar establecer conexiones. para aplicaciones es algo no tan complejo pero en la rama de los Videojuegos su complejidad es bastante elevada, metodos de compresion/descompresion, encriptación, protección de inyección, osfucación de la capa de transporte.
 
 
 
Pero para contestar la pregunta en concreto seria.
 
Si necesitas que cualquier jugador independientemente de si tiene o no ip publica pueda crear un server y registrarlo para que este se visible por cualquier cliente entonces requieres de un Master Server - por ejemplo UNET, PHOTON ...
 
Si quieres realizar un proyecto de prueba y poder jugar con tus amigos, deberás tener IP publica (Solo el servidor), abrir los puertos del server en tu router, eh iniciar el servidor.

Si lo que quieres es que por ejemplo una persona cree el servidor y le pase la IP y puerto a sus amigos (sin matchmaking y cosas asi) simplemente usa el tutorial de UNet creo que era y Hamachi (si jugaste Minecraft en multijugador por el metodo de Hamachi esto es exactamente lo mismo) y en la interfaz que se genera al usar UNet pones la IP y Puerto y listo ya funciona Online desde cualquier parte

"Sin la necesidad de un servidor intermediario" no es posible, los clientes no tienen la capacidad de coordinar con los otros clientes y si le das esa capacidad dejan de ser clientes y pasan a  convertirse a servidor; es decir, el sistema servidor-cliente es parte de lo que propones. Ahora pasando de esto, lo que planteas depende de algunas cosas; como ya te mencionaron, puedes resolverlo de dos puntos de vista.
 
1) Realizas tu proyecto y le das la opcion de ser cliente o de ser servidor (pero a la vez ser parte de "partida").
 
2) El proyecto lo construyes solo como cliente, y la tarea de servidor la realizas en otro programa a nivel consola para que no gastes tanto recursos.

Gracias por las respuestas.  ^,..,v
 
Creo que miraré lo de UNET y Hamachi y buscaré opciones de servidor maestro que habéis comentado e investigaré para tirar por ahí. ^^ Me ha parecido interesante el tema del chat, que probaré también, quizá me de algunas buenas ideas aunque no sirva directamente. ^,..,^
 
Un saludo.

Etiquetas: