Foros del Web » Administración de Sistemas » Software para Servers »

¿Cómo se hace que el servidor trabaje sin estar tu pidiendoselo?

Estas en el tema de ¿Cómo se hace que el servidor trabaje sin estar tu pidiendoselo? en el foro de Software para Servers en Foros del Web. Buenas, Tengo una duda, veo, especialmente de juegos on-line, que tus recursos siguen sumando cuando no estas conectado o competiciones de fútbol que genera resultados ...
  #1 (permalink)  
Antiguo 17/07/2010, 18:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 56
Antigüedad: 16 años, 10 meses
Puntos: 1
¿Cómo se hace que el servidor trabaje sin estar tu pidiendoselo?

Buenas,

Tengo una duda, veo, especialmente de juegos on-line, que tus recursos siguen sumando cuando no estas conectado o competiciones de fútbol que genera resultados a tal hora aunque no estés conectado ¿Cómo funciona esto? ¿Cómo se hace que el servidor haga cosas y las guarde en la base de datos aunque no estés tu conectado?

Gracias!
  #2 (permalink)  
Antiguo 17/07/2010, 22:38
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Respuesta: ¿Cómo se hace que el servidor trabaje sin estar tu pidiendoselo?

Solo hay dos formas, una, que una tarea programada ejecute X script para realizar las tareas necesarias cada x hora, o la otra, que de hecho es como se hace, por ejemplo en un juego tienes dos posibilidades, aunque al parecer todos utilizan la primera que es, primero ejecutas lo que tengas que hacer, pero en tu DB lo mantienes en estado de espera, cuando tu contador de tiempo llegue a 0, simplemente se cambia su estado y se presenta como si el servidor hubiera trabajado todo el tiempo, la otra que es que pone el contador de tiempo y cuando este finalice realizas la tarea necesaria
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 30/07/2010, 09:13
 
Fecha de Ingreso: febrero-2008
Mensajes: 56
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: ¿Cómo se hace que el servidor trabaje sin estar tu pidiendoselo?

Cita:
Iniciado por Nemutagk Ver Mensaje
Solo hay dos formas, una, que una tarea programada ejecute X script para realizar las tareas necesarias cada x hora, o la otra, que de hecho es como se hace, por ejemplo en un juego tienes dos posibilidades, aunque al parecer todos utilizan la primera que es, primero ejecutas lo que tengas que hacer, pero en tu DB lo mantienes en estado de espera, cuando tu contador de tiempo llegue a 0, simplemente se cambia su estado y se presenta como si el servidor hubiera trabajado todo el tiempo, la otra que es que pone el contador de tiempo y cuando este finalice realizas la tarea necesaria

Buenas,

A ver, en el primer caso deduzco que te refieres a un Cron Job, es así? He oído algo al respecto...

Pero me comentas que lo apropiado sería hacerlo de la segunda forma y esta es la que no logro entender.

¿Sabrías de algún ejemplo o podrías hablarme un poco más a respecto?

Muchas gracias, Nemutagk!
  #4 (permalink)  
Antiguo 30/07/2010, 10:30
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Respuesta: ¿Cómo se hace que el servidor trabaje sin estar tu pidiendoselo?

Vamos, pongamos un ejemplo de un juego de batallas en donde tienes que crear 'x' unidad, lo cual por unidad tardas 'y' tiempo, entonces 'x * y = Z', ahora tienes los 'Z' segundos que se supone van a tardar en crearse las 'x' unidades, en tu motor del juego tienes que tener una tabla donde le vas agregando las unidades que el usuario esta construllendo, por ejemplo la tabla unidades_usuarios y esta tendría por ejemplo 4 campos

Tabla: unidades_usuarios
id
idUser
idUnit
units

Aparte de esta abría que tener una tabla temporal para dar la sensación que el juego sigue trabajando aunque no estemos conectados

Tabla: unidades_temporal
id
idUser
idUnit
units
finalTime

Ahora, cuando el usuario manda a construir las unidades ingresas los campos en la tabla "unidades_temporal", ahora para saber a que hora/día terminan de "construir" las unidades tomamos la fecha actual en UNIX (en php con time()) y sumamos el resultado con la anterior ecuación (x * y = z) ahora tendriamos en UNIX TIME la fecha final de creación (time() + (x * y)) , ahora cada vez que el usuario ingrese a su cuenta o a la sección que tu creas conveniente checas la tabla "unidades_temporal" y verificas los registros que ya alla pasado el "x" tiempo necesario (where finalTime < time()) y obtienes las unidades que se van a crear (el campo units.unidades_temporal) y las agregas a la tabla final (units.unidades_usuarios)

Lo que te comento es una forma de las formas en que se puede hacer (así es como yo lo hago) pero seguro hay mas opciones y te evitas de darle mas trabajo del necesario al servidor, al menos no cuando el jugador no este jugando, no se si me entiendas
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 30/07/2010, 12:20
 
Fecha de Ingreso: febrero-2008
Mensajes: 56
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: ¿Cómo se hace que el servidor trabaje sin estar tu pidiendoselo?

Cita:
Iniciado por Nemutagk Ver Mensaje
Vamos, pongamos un ejemplo de un juego de batallas en donde tienes que crear 'x' unidad, lo cual por unidad tardas 'y' tiempo, entonces 'x * y = Z', ahora tienes los 'Z' segundos que se supone van a tardar en crearse las 'x' unidades, en tu motor del juego tienes que tener una tabla donde le vas agregando las unidades que el usuario esta construllendo, por ejemplo la tabla unidades_usuarios y esta tendría por ejemplo 4 campos

Tabla: unidades_usuarios
id
idUser
idUnit
units

Aparte de esta abría que tener una tabla temporal para dar la sensación que el juego sigue trabajando aunque no estemos conectados

Tabla: unidades_temporal
id
idUser
idUnit
units
finalTime

Ahora, cuando el usuario manda a construir las unidades ingresas los campos en la tabla "unidades_temporal", ahora para saber a que hora/día terminan de "construir" las unidades tomamos la fecha actual en UNIX (en php con time()) y sumamos el resultado con la anterior ecuación (x * y = z) ahora tendriamos en UNIX TIME la fecha final de creación (time() + (x * y)) , ahora cada vez que el usuario ingrese a su cuenta o a la sección que tu creas conveniente checas la tabla "unidades_temporal" y verificas los registros que ya alla pasado el "x" tiempo necesario (where finalTime < time()) y obtienes las unidades que se van a crear (el campo units.unidades_temporal) y las agregas a la tabla final (units.unidades_usuarios)

Lo que te comento es una forma de las formas en que se puede hacer (así es como yo lo hago) pero seguro hay mas opciones y te evitas de darle mas trabajo del necesario al servidor, al menos no cuando el jugador no este jugando, no se si me entiendas
Nemutagk, muchísimas gracias!! Ahora lo entiendo mucho mejor.

No obstante, me surge una duda, si las unidades terminan de construirse, por ejemplo, a las 3 de la mañana y el jugador no ingresa o no realiza algún evento para que pase de la tabla temporal a la del usuario, esas unidades no estarán disponibles hasta que el jugador haga un evento o ingrese, no es así? o estoy dejándome algo?
  #6 (permalink)  
Antiguo 30/07/2010, 13:26
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Respuesta: ¿Cómo se hace que el servidor trabaje sin estar tu pidiendoselo?

En efecto, pero aquí es donde entra el ingenio, por ejemplo, si algun otro usuario ataca a dicho usuario primero verifica si tiene unidades en "cola" para construcción, si las hay y ya paso el tiempo de construcción actualizas las unidades y puedes calcular el resultado de la batalla, ahora si el usuario entra a las 10 am pero sus unidades terminaron a las 3am cuando el entre automáticamente actualizas la info y el nunca se dará cuenta, el chiste es no tener trabajando 24 horas el servidor en info que no es necesaria que se actualice en tiempo real

Nota: se me olvidaba algo, acuérdate que en este tipo de juegos hay muchos jugadores que de x tiempo abandonan sus cuentas, en ese caso no tiene caso en absoluto que gastes trabajo del servidor en esas cuentas abandonadas, así evitas carga al servidor, y todos los recursos van a los usuarios activos
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: servidores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:57.