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.
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=2 (http://miservidor/)Donde 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]
Título: [Pregunta]Crear pseudo-Servidor mediante base de datos online(para juegos por turnos)
Publicado por: Arthure en Octubre 25, 2015, 03:51:34 PM
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);
}
?>
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
Yo use hace un tiempo cgi y php (solo por probar) con un server casero corriendo xampp y creo que es muy importante mantener muy lejos a los usuarios de las ddbb sobretodo de las cuentas de administrador. Hace tiempo leí sobre un ataque a un banco... tuvo una fuga de seguridad, el atacante remoto logro con una cuenta de administrador (que quien sabe como obtuvo), crear otra cuenta de admin, y desde esta última, reseteo las claves de los otros administradores, luego, las cambio por (Smile) y entonces dejó sin poder hacer nada a los administradores en la db que contenía los datos de los clientes. A partir de ahí quien sabe que más hizo el tipo. (Dicen que no hizo nada más)... pero nada menos Dejar muy lejos las ddbb de los usuarios es un paso mínimo. Yo no almacenaría los turnos, pienso que son datos transitorios, luego como dice Arthure el server de las ddbb tendría que notificar cada uno de los movimientos a todos los usuarios... pero para que? Si cuando termine la partida ya nadie la requiere. Tal vez solo programar el guardar el estado de la partida y los puntajes cuando se salga de esta pero sea el player que hace de server de el juego, el que se comunique con el servidor de la db que perfectamente puede estar en otro lugar...Siempre hay como... una db para los datos de usuarios y otra para los datos de las partidas. Siempre podrían ser mani***das por algún tercero. Esconder los datos importantes es lo principal.
Para empezar a trastear he creado una web gratuita en webnode.com, pero no me permite subir una página web personalizada, tan solo deja instalar una de las plantillas de las que dispone.Y cuando intento administrar la página, solo me deja subir archivos. Desde su foro avisa que es neceario utilizar algún sistema especializado que te lo permita y enlazarlo posteriormente con la web:
http://foro.webnode.es/f/discusion-abierta/base-de-datos1/¿
Existe otra manera de colgar una base de datos, que no sea desde una página web? Al parecer las páginas gratuitas solo permiten instalar plantillas predeterminadas.Si subo la base de datos a la web, ¿supongo que no me dejara modificarla utilizando sockets? Será necesario hacerlo como habéis dicho, mediante código .php( o html).
Alguna otra forma sería con un servidor dedicado, o si tienes una IP homologada puedes instalar WAMP/AMPPS y tener un servidor web en Internet. No sé cuales hosting gratuitos te dejarán hacer lo que quieres, pero generalmente si compras un dominio en alguno de los proveedores grandes te dan el hosting y la BD gratis... por ejemplo la empresa esa del que mató un elefante hace unos años xPPara usar sockets tienes que crear tu propia aplicación ya sea en Java/C#/C++/... que esté escuchando algún puerto y se comunique. Sólo puedes correr esas apps en servidores dedicados.
[quote author=kaito" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="33164" data-ipsquote-contentcommentid="121834">Para empezar a trastear he creado una web gratuita en webnode.com, pero no me permite subir una página web personalizada, tan solo deja instalar una de las plantillas de las que dispone.Y cuando intento administrar la página, solo me deja subir archivos. Desde su foro avisa que es neceario utilizar algún sistema especializado que te lo permita y enlazarlo posteriormente con la web:
Título: [Pregunta]Crear pseudo-Servidor mediante base de datos online(para juegos por turnos)
Publicado por: dariovillar en Octubre 27, 2015, 07:59:14 AM
Puedes probar con los Websites de Azure, son gratuitos y tienes la posibilidad de crear varios tipos de bbdd.Prueba a crear una API rest de ASP y tienes la posibilidad de utilizar tanto SQL como NoSQL con MongoDB, de ese modo tienes una infraestructura capaz de comunicar con JSON y así comunicar a muchos clientes simultáneos.Otra ventaja es que puedes crear con ASP, PHP, NodeJS... y publicas directamente desde Visual Studio, que también es gratuito.
Si, Azure tiene varios recursos para ello, yo lo utilizo para base de datos.
Busca un sitio que permita crear una web gratuita con base datos mysql y php. La base datos la creas cuando estés dentro del panel de administración de tu sitio y la administras allí mismo.
En una primera búsqueda encontré este: http://www.hostinger.es/ (http://www.hostinger.es/)
Ok, muchas gracias. Finalmente la he creado en hostinger.es. Ya tengo la base de datos creada, ahora buscare código en codeproject y otros sitios, a ver si encuentro alguna plantilla o librería, mediante php, sockets o lo que sea.