Tema: Juego MMORPG
Ver Mensaje Individual
  #4 (permalink)  
Antiguo 13/12/2015, 04:07
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Juego MMORPG

Cita:
Iniciado por xonil Ver Mensaje
Lo de guardar los datos de la partida para un eventual refresco de pagina en una base de datos, pues creo que o no me has entendido cuando hablé en la introducción o lo explique mal, pero eso es una utopia. El acceso a una base de datos tipo mysql para este tipo de programas con la rapidez que se pide, es una burrada de lento, de hecho ya mencione que eso lo pensaba hacer con la función storage de html5, ya que el refresco sería de parte del cliente, y sólo se pediría al servidor la hora. pero lo ideal es que los datos estén en memoria y así cuando se piden el tiempo de respuesta estaría dentro de los parámetros que se piden de rapidez. De hecho lo complicado es en el tipo de partidas con incremento de tiempo, ya que no sirve el calcular el tiempo de inicio de partida, el tiempo del rival, ... ya que según las jugadas de uno y del otro, ha habido un incremento de tiempo.
Cuanto puede ocupar una partida en la base de datos? 10kb?
En una conexión a 10MB se podría tardar unos 100ms en enviar los datos al Cliente contando con pedirlos a la base de datos.

Google envía varios gigas de datos por segundo, recuperando todo de bases de datos y nadie se queja de su rendimiento.

Hacerse como digo se puede, simplemente hay que encontrar un equilibrio entre el número de jugadores y el número de servidores. Obviamente con servidores gratuitos se limita mucho el número de partidas simultáneas.

En cuanto a la penalización por actualizar... Eso es algo que hace el jugador de forma voluntaria y manual... El sabrá.

Cita:
Iniciado por xonil Ver Mensaje
Lo que quiero es hacer un programa en c++ que funcione en el servidor, que responda a las peticiones de sockets de los clientes, y que; por cada petición de partida, cree un objeto tipo partida "por ejemplo", y así por cada petición de partida nueva, pero luego necesitaría saber como llamar a un objeto tipo partida creado anteriormente, esa es la cuestión, como saber que objeto tipo partida llamar.
Y realmente crees que un programa tuyo va a estar más optimizado que una base de datos programada por gente con un nivel sorprendente?

Al fin y al cabo tu programa va almacenar las partidas... Que es lo que va a hacer la base de datos. ¿Y que desventaja se supone que va a tener la base de datos respecto a tu programa?
  • Rapidez. Eres consciente que mysql es una aplicacion bastante optimizada? con un buen esquema de tu base de datos ira como un tiro.
  • Rapidez (II)? Tu programa tendrá todo en memoria, vale. Las bases de datos tienen caché, que son datos almacenados en memoria. Si a la base de datos le das el tamaño suficiente de caché tendrá todas las partidas en memoria y su velocidad será inmejorable.
  • Rapidez (y III) que el servidor se conecte a una aplicación que esta en tu pc va a tener una latencia considerable. Los servidores de internet suelen evitar esto haciendo que servidor y base de datos estén en la misma red, lo que reduce el tiempo de transmisión y evita las colisiones. No vas a poder competir contra eso.
  • Seguridad? Vas a programar un sistema de autenticación con cifrado a nivel de red? No se, para evitar que pirateen tu programa a los 5 minutos... MySQL ya viene con todo eso integrado.

Piensa que el programa no lo vas a terminar en dos días.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.