Motor de búsqueda de juegos en formatting p2p

Actualmente estoy usando Java para desarrollar un motor de juego multijugador. Sin embargo, estoy atascado en una cosa. Muchos juegos (Overwatch, DotA) tienen motores de búsqueda automática de juegos: haces clic en un button y la computadora te encuentra automáticamente un juego. Lo primero que pensé para replicar esto fue tener un server al que se conectaran todas las computadoras que ejecutaran el juego, luego encontraría grupos de, por ejemplo, en un juego de equipo 3v3, 6, comenzaría una nueva sala con esos 6 y ejecutaría el juego. Sin embargo, hay un problema importante aquí: solo tengo 14 años y no estoy cerca de poder comprar una granja de serveres que sea necesaria. Como no puedo pagar esto, un solo server que ejecute el juego estaría fuera de cuestión, así que he estado investigando el formatting p2p (peer-to-peer). El problema es que no puedo pensar en una forma de tener un motor de búsqueda automática de juegos en formatting p2p sin un server host. ¿Hay alguna forma de que pueda replicar esto con un formatting p2p?

En primer lugar, no hay forma de hacer esto 100% de igual a igual, como señaló Cozmic. Necesita algún tipo de tercero que establezca la connection entre los clientes. Bittorrent usa serveres de seguimiento para esto, por ejemplo.

Sin embargo, hay un par de soluciones gratuitas que puede usar para que sus clientes descubran a otros clientes.

En primer lugar, está Heroku en el que puede alojar pequeños progtwigs (como su propio server de connection java). No creo que sea suficiente alojar todo el server del juego, pero siempre y cuando solo establezca la connection entre los clientes, y uno de sus clientes es el host (p2p), debería funcionar bien. Heroku proporciona 550 horas al mes de forma gratuita, lo que equivale a alnetworkingedor de 18 horas por día, por lo que su juego no funcionaría las 24 horas, los 7 días de la semana. Afortunadamente puede boost esto para que sea básicamente el 100% del time, agregando una tarjeta de crédito. No le cobrará nada, solo necesita esto para que pueda verificar que no abuse del service.

La segunda opción sería usar algo como Firebase-Database , y hacer que los clientes ingresen sus detalles de connection (dirección IP) en la database.

Finalmente, puede verificar la configuration de su enrutador, si puede abrir puertos, puede alojar este server en su computadora. Simplemente tendría que utilizar algún service de dyndns, que resuelve un dominio, a su dirección IP ya que la mayoría de los proveedores residenciales cambian su dirección IP de vez en cuando.

Para establecer realmente la connection, es posible que desee utilizar un protocolo como STUN y si eso falla TURN . Hay muchos serveres gratuitos para aturdir, como estos .

El emparejamiento punto a punto siempre se realiza a través de un server de terceros:

Cuando se crea un juego, se envía un post al server de emparejamiento informándole que un juego con <jugadores máx. Está disponible.

cuando se agrega un jugador al juego, se actualiza el server de emparejamiento. si se alcanza el máximo de jugadores, se envía otra notificación, que elimina el juego de la list de juegos disponibles.

Si un jugador abandona el juego, el server recibe una nueva notificación, permitiendo que el juego se vuelva a publicitar.

Cuando el juego se destruye (finaliza o cancela), el server lo eliminará nuevamente de la list de juegos disponibles.

Los clientes pueden, a su vez, conectarse al server de emparejamiento para encontrar las direcciones IP de los juegos disponibles, cuando el jugador selecciona un juego, el server envía esa dirección IP por order de llegada, y el cliente se conecta directamente, y el el juego comienza

Todavía no he progtwigdo nada relacionado con la networking, pero al leer esta pregunta tuve la siguiente idea:

En primer lugar, no puedo pensar en ninguna forma de lograr esto sin ningún tipo de server. Piénselo, cómo debe saber un cliente de su juego sobre cualquier otro cliente en el mundo si no hay un server que lo conecte o si el usuario no le da ninguna dirección para conectarse. No puedo imaginar que hubiera una manera de que esto pudiera funcionar.

La idea de que me dirijo, sin embargo, consiste en un pequeño server, que es responsable de conectar solo a los clientes y luego permite que los clientes establezcan una connection entre ellos. De esta forma, el cliente hace todo el trabajo posible y todo el server efectivamente lo hace, es enviar a un cliente una dirección para conectarse.

El server sería realmente barato entonces.

Una cosa a considerar con esto es que deberá tener mucho cuidado con la protección de los datos del usuario cuando los envíe a los clientes para conectarse.