Noticias

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

[Pregunta]Crear pseudo-Servidor mediante base de datos online(para juegos por turnos)

Iniciado por kaito, Octubre 25, 2015, 10:38:39 AM

Tema anterior - Siguiente tema
Quisiera utilizar un servidor de páginas web gratuitas para hospedar una base de datos online, donde varios usuarios se conecten al mismo tiempo a la base de datos web, desde la Aplicación/Juego creado con Unity. _________________________ He visto varias preguntas sobre networking que utilizan clases derivadas de NetworkBehaviour, donde un equipo servidor ejecuta la aplicación/juego y otro equipos clientes se conectan.En teoría, varios usuarios se pueden conectar online a una misma base de datos web. Cada equipo cliente ejecutaria una aplicación/juego independiente que comporte una misma base de datos online con el resto de equipos clientes.Pero, no sé como crear esa base de datos. He visto herramientas como XAMPP o tutoriales sobre crear aplicación web ASP.Net y sobre Aplicaciones WPF. Como he dicho al principio, los clientes(jugadores) se conectarian con un mismo nombre o clave de acceso a la base de datos web, por ejemplo "Arena", "123456". Serían los datos de conexionEn dicha base de datos habría una tabla de organización llamada "Partida", otra tabla llamada "NombreJugadores" que sería el ID de identificación, y otras tablas necesarias para el juego.Primera pregunta, ¿se podría crear un pseudo-Servidor que no ejecute ninguna aplicación, donde solo se utiliza una base de datos web con varias tablas: partida, usuarios, proyectiles, posiciones, etc... con una clave de acceso genérico, igual para todos, utilizada por la aplicación/juego?Segunda pregunta, ¿es necesario crear una página web o crear algun tipo de aplicación ASP o WPF, para poder crear/utilizar dicha base de datos web? He visto código de como utilizar la base de datos web, pero ¿cómo se crearía/hospedaría en el servidor, para que permita ser modificada/leida por todos los jugadores?

hola kaito,creo que, aun currandotelo mucho, no es una solucion viable el utilitzar una base de datos como servidor; entendiendo que la comunicacion entre servidor y clientes tiene un flujo constante y debe ser ademas fiable en sus datos ... no veo manera humana de hacer eso.

[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="33164" data-ipsquote-contentcommentid="121435 date=1445767571]hola kaito,creo que, aun currandotelo mucho, no es una solucion viable el utilitzar una base de datos como servidor; entendiendo que la comunicacion entre servidor y clientes tiene un flujo constante y debe ser ademas fiable en sus datos ... no veo manera humana de hacer eso.[/quote]Efectivamente, no sería viable para un juego fps como call of duty.Pero para juego por turnos(cartas, estrategia, roll, etc...), o simplemente para almacenar máximas puntuaciones sí que sería viable.

Necesitarías una cuenta de hospedaje y dominio que será donde tendrás tu base de datos... También podrías montarlo en tu casa, pero pienso que no merece la pena tener el PC en tu casa 24 horas encendido y demás.Si contratas un plan de esos con hospedaje, suelen traer funcionalidades para manejar bases de datos mysql .  Donde yo tengo mi Web y las bbdd con los rankings uso la herramienta phpmyadmin para manejar las bbdd.  No hace falta que tengas una web hecha, puedes tener solo la bbdd.  A la bbdd se accede desde tu aplicación a archivos php que tengas en tu servidor y estos archivos acceden a la bbdd.  

FNK Games  Games Developer  -  Juegos realizados en Unity para iOS y Android



Como dice @Mantis, siendo los archivos php servicios php que devuelven estructuras JSON mapeables directamente sobre clases C#. Así es como lo hago yo con app's de gestión online y no hay problemas. Eso sí, tienes sus trucos con elementos 100% dinámicos, pero en tu caso que son turnos, lo tienes más fácil.

Los servidores de world of warcraft están echo solamente con bases de datos. Lo veo posible.

Se puede pero en un hosting gratuito con servidor compartido sólo puedes hacer juegos por turnos porque los limitan para que no se puedan hacer muchas peticiones seguidas. En el mejor de los casos puedes hacer una petición cada 1-2 segundos desde IP's diferentes. Si montas tu propio servidor o compras uno dedicado puedes tener todas las que quieras.Puedes comenzar probando con peticiones HTTP GET como http://miservidor.com/servicio.php?a=1&b=2Donde a y b son los parámetros. El PHP los procesa y retorna algún resultado como sumar 1+2 = "3", que interpretas en el juego.Más adelante te darás cuenta de los problemas de estructurar los datos, seguridad y orden de acceso, que son MUY duros de resolver.

Cita de: leocub58 date=1445781202" data-ipsquote="" data-cite="leocub58" class="ipsQuote">Los servidores de world of warcraft están echo solamente con bases de datos. Lo veo posible./quote]:blink:

mi recomendacion ... aunque la mayoria de este foro no podriamos hacerlo, tu sabes programacion y tienes curiosidad por hacer cosas nuevas con lo que imagino que no te rindes a la primera de cambio (solo hay que mirar tu foro particular), por lo tanto si yo fuera tu y quisiera hacer un sistema multiplayer propio y no utilizar los que ya hay (bien sea porque no cumplen con tus requisitos, por el gozo de utilizar un sistema que hayas programado tu o cualquier otro motivo) programate un gestor para partidas multiplayer desde cero ... tienes ***a de cojones, pero debe ser un trabajo super gratificante y mas para ti que parece te gusta investigar y hacer cosas nuevas.puedes empezar con la cosa mas tirada, simplemente el uso de sockets y enviar un mensaje de un cliente a otro ... y a partir de ahi le vas añadiendo todo lo que se te ocurra. pero lo que pretendias era querer inventar la rueda pero haciendola cuadrada (es decir, un imposible) xD

Las consultas sobre servicio PHP no quiere decir que internamente sean solo "SELECT's". Puedes estar actualizando la bbdd desde el servicio PHP al realizar la petición en el servicio. Puedes obtener datos filtrados por usuario o consolidados a nivel global. No entiendo ese comentario de que solamente afectan al jugador que las realiza. Creo que se confunde la sesión de PHP típica de login en web con el acceso a servicios PHP, donde puedes hacerlo como quieras.Respecto a WoW, no funciona con servicios PHP u otros o directamente con bbdd (aunque internamente utilice Oracle), ya que es un sistema basado en push sobre el cliente. Utiliza mensajes vía UDP/UDP modificado contra el cliente, donde éste tiene un "listener", un daemon en cultura Unix, donde está constantemente procesando las entradas. Dado que los mensajes UDP no aseguran el acknowledge del mismo, la latencia es muy importante, aunque si hay "pérdidas" no muy graves no va a pasar nada. Inclusive se utiliza algún sistema de interpolación, sobre el movimiento p.ej., para evitarlas.Crear un multiplayer para 10 jugadores puede ser relativamente sencillo. Para 100 o más, es cuando puedes perderte totalmente.No quisiera desmotivarte, pero para crear un multiplayer eficiente debes tener unos buenos conocimientos matemáticos y de protocolos de red a bajo nivel. No es ninguna tontería.

Cita de: iRobb date=1445786259" data-ipsquote="" data-cite="iRobb" class="ipsQuoteLas consultas sobre servicio PHP no quiere decir que internamente sean solo "SELECT's". Puedes estar actualizando la bbdd desde el servicio PHP al realizar la petición en el servicio. Puedes obtener datos filtrados por usuario o consolidados a nivel global. No entiendo ese comentario de que solamente afectan al jugador que las realiza. Creo que se confunde la sesión de PHP típica de login en web con el acceso a servicios PHP, donde puedes hacerlo como quieras.
xDDD ya se que con PHP se pueden hacer tambien actualizaciones de bbdd ... lo que me refiero es que esos cambios no se reflejan en el resto de jugadores hasta que no realizan una peticion de consulta para ver si han habido cambios, a eso me referia con que solo afectan al jugador que la realiza. Ese cambio pasa desapercibido para el resto de jugadores hasta el momento que realizan una consulta y comprueban si han habido cambios o no ... dicho de otro modo, tu puedes hacer cambios en la bbdd con una peticion, pero no se comunica al resto de jugadores que esa peticion se ha llevado a cabo (el resto de jugadores ni se enteran de que se ha llamado al servicio) ... no se, espero que ahora entiendas a lo que me referia con el comentario porque no se como explicarlo mejor.El problema me parece que, o bien yo no me he enterado de la pregunta (que tambien puede ser), o la gente responde lo primero que le viene a la cabeza sin saber lo que se pregunta xD yo quiero entender que el proposito que quiere conseguir Kaito, la duda que tiene, es hacer un servicio multijugador SOLO mediante una base de datos (sin utilizar ningun tipo de gestor) ... y yo decia que es totalmente inviable, puedes consultar una base de datos online (que creo que es a lo que esta respondiendo la gente), y no hay que ser un genio para saber que es posible, pero no tiene nada que ver con la cuestion que propone el autor del tema.

Pues sí, me aburro bastante. La cuestión es que no quiero invertir dinero en un servidor dedicado para crear un juego online. Voy a empezar con un juego de cartas "la escoba" donde:1)Cada partida o sala estará formada por 2 jugadores.2)Cuando ejecutas el juego:i) Puedes crear una "Sala" o "Partida" a la que se pueden unir otro jugador, y esperar jugando contra la máquina hasta que algun jugador solicite jugar.ii) Puedes solicitar entrar a una "Partida" ya creada, que podrá ser rechazada o aceptada por el creador de la sala. Luego veré si puedo hacer algo más complicado. __________________________ Por lo que he visto en la respuestas se puede acceder a una base de datos web SQL mediante peticiones php o html, ¿cual sería el procedimiento? Se crea primero la base de datos desde una aplicación externa. ¿Existe alguna plantilla(código) php o html para acceder a dicha base de datos?

Una vez dentro de tu cuenta de hospedaje. Según el tipo de panel de administración se hace de una manera u otra. Pero creas tu bbdd con un nombre de usuario y pass, despues puedes usar phpMyadmin para crear tablas visualmente de manera muy sencilla. Vamos a suponer que tienes una bases datos llamada Ranking. con una tabla llamada Scores.  Esa tabla tiene dos campos nombre y score  por ejemplo....Dentro de tu aplicación podríamos hacer esto para añadir un elemento en la tabla:
function SubirTiempoRanking(nombre : String , score : String) {
    var form = new WWWForm();
    form.AddField("action","subir_tiempo");
    form.AddField("name",nombre);
    form.AddField("score",score);    

    var url = "http://www.nombre_dominio.com/Unity3D/ranking.php";
    var w = WWW(url,form);
    yield w;
}
 Luego te creas un php  de nombre ranking.php y lo cuelgas en tu servidor ->  (carpeta public/Unity3D/ ranking.php) según el ejemplo.El php podría llevar esto: 
 <?php

$conexion = mysql_connect("localhost","kaito","234gdsfT15");
mysql_select_db("Ranking");


if($_REQUEST['action']=="subir_tiempo") {
    $name = $_REQUEST['name'];
    $score = $_REQUEST['score'];
    $query = "INSERT INTO `Scores` (`name`,`score`) VALUES ('$name','$score')";
    mysql_query($query);   
    mysql_close($conexion);
}
?>
 

FNK Games  Games Developer  -  Juegos realizados en Unity para iOS y Android



Toma en cuenta que las bases de datos de los hosting suelen estar en servidores separados al que procesa HTTP, entonces tienes una comunicación de red esta forma:Juego <---> Servidor Web <---> Base de DatosLa transmisión entre cada punto toma su tiempo, incluso si el servidor y la BD están en el mismo edificio. Si vas a hacer algo sencillo usa archivos en el mismo servidor. Si quieres aprender BD entonces ponte al hilo con el lenguaje SQL. La base de datos la creas desde el administrador que el hosting te provea, luego te conectas a la DB por el dominio y puerto que te diga, y gestionas todo con comandos SQL. Te llevará un tiempo aprender.

los datos para conectar con la base datos están en el php para que no estén accesibles acualquiera que acceda al código de tu aplicación

FNK Games  Games Developer  -  Juegos realizados en Unity para iOS y Android



Etiquetas: