Foros del Web » Programando para Internet » PHP »

Como hacer un cronjob cada segundo

Estas en el tema de Como hacer un cronjob cada segundo en el foro de PHP en Foros del Web. Saludos, quisiera hacer que un archivo se ejecute cada segundo o cada 2 segundos. Esto es para un juego de navegador y este archivo se ...
  #1 (permalink)  
Antiguo 21/10/2012, 04:16
Avatar de Fylux  
Fecha de Ingreso: junio-2012
Mensajes: 141
Antigüedad: 11 años, 10 meses
Puntos: 9
Pregunta Como hacer un cronjob cada segundo

Saludos, quisiera hacer que un archivo se ejecute cada segundo o cada 2 segundos. Esto es para un juego de navegador y este archivo se ocupará de ampliar edificios y actualizar la cantidad de recursos.

He buscado en Google como hacer para que el cronjob se ejecute cada segundo, pero solo encuentro cada minuto. Y además mi proveedor de hosting me pone un formulario para el cronjob donde me pone minutos, horas, día, mes y día de la semana, pero no segundos.

¿Alguien me puede ayudar?
Saludos y gracias de antemano.
__________________
Si todos escribiéramos sin faltas de ortografía, el mundo sería un lugar mejor.
  #2 (permalink)  
Antiguo 21/10/2012, 06:34
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Como hacer un cronjob cada segundo

Pues habla directamente con tu proveedor de servicios para saber si te permiten entrar a la consola de linux y realizar directamente esa operación. Explicales la situación y ellos te podran colaborar. Si ellos ponen directamente el formulario es porque no quieren que tu lo manipules directamente por razones de seguridad o de una mala configuración.
__________________
Blog de humor http://elcuasatar.net63.net/
  #3 (permalink)  
Antiguo 21/10/2012, 09:46
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Como hacer un cronjob cada segundo

Eso es una pésima idea por no decir otra cosa, probablemente si les dices a los del hosting te digan que no debes hacer algo así y es muy sencillo, tendras trabajando el servidor todo el tiempo, por lo cual consumirá demasiados recursos, incluso, es probable que si lo haces te llamen la atención o incluso te bloqueen el sitio, en fin, para o que quieres hacer es mejor que con las acciones del mismo usuario actualices sus stats y demás información, así solo gastas recursos en los jugadores activos y no en todos los que esten registrados
__________________
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 =)
  #4 (permalink)  
Antiguo 21/10/2012, 11:58
Avatar de Fylux  
Fecha de Ingreso: junio-2012
Mensajes: 141
Antigüedad: 11 años, 10 meses
Puntos: 9
Respuesta: Como hacer un cronjob cada segundo

Y entonces como voy a hacer que se amplien los edificios sin que el usuario se conecte. ¿Se les ocurre otra idea?
Por lo que me han dicho juegos tipo ogame usan este método.

Saludos.
__________________
Si todos escribiéramos sin faltas de ortografía, el mundo sería un lugar mejor.
  #5 (permalink)  
Antiguo 21/10/2012, 12:31
Avatar de Fylux  
Fecha de Ingreso: junio-2012
Mensajes: 141
Antigüedad: 11 años, 10 meses
Puntos: 9
Pregunta Como hacer el motor de un juego de navegador

Saludos, como algunos ya sabrán estoy creando un juego de navegador. El motor lo que debe hacer es cosas como ampliar los edificios cuyo tiempo de ampliación haya pasado, actualizar la cantidad de recursos, actualizar los ataques... He preguntado en un montón de sitios y en unos me han dicho que use un cronjob cada segundo o cada 2 segundo, otros me han dicho que eso de un cronjob por segundo ni se me ocurra porque se va a cargar demasiado el servidor. Otros me han dicho que esto no es posible con PHP y hay que usar Comet.

¿Cuál es la forma correcta y eficiente de hacerlo? ¿Por qué?

Saludos y gracias de antemano.
__________________
Si todos escribiéramos sin faltas de ortografía, el mundo sería un lugar mejor.
  #6 (permalink)  
Antiguo 21/10/2012, 14:48
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Como hacer un cronjob cada segundo

Ya te explique como, y no OGame no usa ese metodo, te lo digo porque eh programado varios juegos de este tipo, lo stats, construcciones etc, se actualizan cuando el usuario se conecta y mientras este jugando (cargando páginas), o en caso de ser atacados (si es que no esta conectado) cuando el usuario rival envia tropas contra un usuario, imagina que tienes 3000 usuarios, pretendes actualizar cada segundo los stats de cada uno?, en primera seguramente el script ni si quiera termine de trabajar en 1 segundo, aparte, de esos 3000 probablemente 1000 ni si quiera juegue por lo cual desperdiciarás recursos en jugadores que ya ni si quiera juegan...
__________________
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 =)
  #7 (permalink)  
Antiguo 21/10/2012, 14:52
Avatar de Fylux  
Fecha de Ingreso: junio-2012
Mensajes: 141
Antigüedad: 11 años, 10 meses
Puntos: 9
Respuesta: Como hacer un cronjob cada segundo

¿Y cómo vas ha ampliar edificios si no se conecta el usuario? Porque si yo subo una casilla de producción mi producción debe aumentar cuando esto ocurra y si yo no actualizo la pagina no aumenta la producción hasta que no actualizo y se amplía el edificio.

¿Cómo solucionas esto?, pues es un problema grave.

Saludos.

PD: ¿Podría hacer que este archivo se ejecute una sola vez, pero que este se actualice cada segundo poniendo un header location?
PD2: No tendría problema con los usuarios que no están activos porque esos como no atacan ni construyen no tengo que comprobarlos. Porque los ataques y ampliaciones si que se deben hacer sin que se conecte el usuario.
__________________
Si todos escribiéramos sin faltas de ortografía, el mundo sería un lugar mejor.

Última edición por Fylux; 21/10/2012 a las 15:00
  #8 (permalink)  
Antiguo 21/10/2012, 15:05
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Como hacer un cronjob cada segundo

No se si no me doy a entender o no se, el jugador tiene 2 estados, online u offline:

online:
Quiere decir que constantemente esta haciendo peticiones al servidor, estas peticiones puedes estar revisando la cola de construcción, si ya termino la construcción mas próxima (si es que la hay) y actualizar los recursos (estos últimos es mejor actualizarlos cada X segundos, por ejemplo 30, si no, la carga al servidor será muy alta)

offline:
El jugador no esta conectado, pero el juego se supone que debe continuar recolectando los recursos y terminando de construir edificios y unidades, PERO, que va a pasar si el jugador ya no regresa? vas a estar derrochando recursos en el?, por supuesto que no, por eso, cuando el usuario esta autenticando es cuando se analizan la cola de construcción, los recursos y de unidades, así cuando termine de actualizarse el ya verá todo como si se estuviera actualizando en tiempo real

La forma en la que estas pensando es tipico cuando no tienes experiencia, y obvio, no estoy diciendo que este mal, pero es hacer trabajar el servidor de mas, y tus costos se dispararán, por no decir que probablemente tengas problemas con el hosting (a menos que sea uno dedicado), es mejor usar esos recursos (por los que estas pagando) en los usuarios que si juegan en vez de los que abandonaron tu juego...
__________________
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 =)

Última edición por Nemutagk; 21/10/2012 a las 15:24
  #9 (permalink)  
Antiguo 21/10/2012, 22:13
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Como hacer el motor de un juego de navegador

mmmm, te estas llendo por otro lado que nada tiene que ver, en un juego de navegador (via PHP) no existe como tal un motor, si no un conjunto de archivos que hacen funcionar el juego, en todo caso el motor sería el propio PHP, en fin, aparte, hay muchos tipos de juegos, unos tienen un requerimiento y otros un requerimiento diferente, para lo que eh visto estas intentando hacer un juego tipo OGame, este juego funciona como te eh comentado anteriormente, al menos hasta donde jugué ya que no lo eh tocado en un rato, primero define bien lo que quieres hacer y luego analiza lo que pretendes hacer, un servidor Apache/PHP no esta hecho para tener corriendo un script PHP cada segundo, eso es una locura, en todo caso, si piensas hacer algo así te recomiendo otro lenguaje, C++ es lo mas adecuado o Python...
__________________
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 =)
  #10 (permalink)  
Antiguo 21/10/2012, 23:41
Avatar de Fylux  
Fecha de Ingreso: junio-2012
Mensajes: 141
Antigüedad: 11 años, 10 meses
Puntos: 9
Respuesta: Como hacer un cronjob cada segundo

Bueno, yo comprendo lo que quieres decir, pero si yo mando a construir una granja eso debe aumentar mi producción de cereal, pues esta no se va a ver incrementada hasta que me conecte. Osea que si en vez de producir 5 por hora con esta ampliación produzco 10 por hora y me voy y me pongo offline mi producción hasta el día siguiente que me ponga online será de 5 por hora, por lo que habré producido la mitad.
Supongo que esto puede ser cargar de más el servidor, pero creo que esto es necesario para que el juego sea eficiente. Podría quitarle precisión y hacer un cronjob que ampliara cada minuto para que el margen de error fuera de 1 minuto.
Y no quiero decir que todo se actualice en el motor. Los recursos los pueden actualizar los usuarios y tal, pero las ampliaciones si deben ser por su cuenta, pues no están asociadas a ningún evento de otro usuario, aunque sea el cronjob solo para las ampliaciones, pero no se me ocurre otra forma de ampliar. Y por si no ha quedado claro pongo un ejemplo:
Son las 10:00
Tengo 0 de cereal.
Produzco 5 de cereal por hora.
Construyo una granja que hará que produzca 10 por hora. 00:01:00 para la ampliación.
Me desconecto.
Vuelvo al día siguiente a las 10:00
En vez de tener 240 de cereal que es lo que correspondería por la ampliación tendré 120.

En el caso de que primero amplíe y luego actualice:
Son las 10:00
Tengo 0 de cereal.
Produzco 50 de cereal por hora.
Construyo una granja que hará que produzca 100 por hora. 10:00:00 para la ampliación.
Me desconecto.
Vuelvo al día siguiente a las 10:00
En vez de tener 600+1000 voy a tener 2400 de cereal que es lo que correspondería por la ampliación tendré 120.

Como dije comprendo que el resto de cosas deban evitar hacerse en el cronjob, pero esta no se como hacerla sin el cronjob.

¿Comprendes lo que te quiero decir?

Saludos.
__________________
Si todos escribiéramos sin faltas de ortografía, el mundo sería un lugar mejor.
  #11 (permalink)  
Antiguo 21/10/2012, 23:42
Avatar de Fylux  
Fecha de Ingreso: junio-2012
Mensajes: 141
Antigüedad: 11 años, 10 meses
Puntos: 9
Respuesta: Como hacer el motor de un juego de navegador

Bueno, no es que tenga intención de cambiar de lenguaje. Pero he oído que lo mejor para juegos de navegador es Node.JS.

Saludos.
__________________
Si todos escribiéramos sin faltas de ortografía, el mundo sería un lugar mejor.
  #12 (permalink)  
Antiguo 22/10/2012, 00:00
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Como hacer un cronjob cada segundo

mmmm al parecer no comprendes lo que intendo decir, aquí no importa eso, porque todo se maneja con tiempo, al menos así debería de ser, las matemáticas no son variables, no se como estas "caculando" dentro del juego los recursos, pero en realidad es sencillo, con tu mismo ejemplo...

Primero dices que son las 10:00, y que tu edificio no terminará de construir dentro de 10 horas, por lo cual terminará hasta las 20:00 hrs, en ese lapso de tiempo el edificio seguirá produciendo lo mismo, por lo cual calculas cuando se ah generado en ese lapso, posteriormente calculas desde la hora/fecha que se termino de construir el edificio y vuelves a calcular el recurso pero ahora con la nueva producción, así tendrás el recurso correctamente, para mas facil...

Código PHP:
Ver original
  1. <?php
  2. $produccionHora = 20;
  3. $multiplo = 1; //aquí será la actualización de tu edificio
  4.  
  5. $horaInicialConstruccion = 123456; //un ejemplo en unix-time
  6. $horaFinConstruccion = 159456;
  7. $segundosPasados = $horaFinConstruccion - $horaInicialConstruccion;
  8. $horasPasadas = ceil(($segundos / 60) / 60);
  9. $recursosHoras = $produccionHora * $horasPasadas;
  10. //aquí se supone que termino de construir el edificio, por lo tanto tienes el multiplo o sea cual fuere tu caso
  11. $multiplo++;
  12.  
  13. //ahora calculamos con el nuevo multiplo....
  14. $horaActual = 245856; //han pasado 24 horas desde que se comenzó a construir el edificio...
  15. $segundosPasadas = $horaActual - $horaFinConstruccion;
  16. $horasPasadas = ceil(($segundosPasados / 60) / 60);
  17. $nuevaProduccion = ($produccionHora * $multiplo) * $horasPasadas;
  18.  
  19. $produccionFinal = $recursosHoras + $nuevaProduccion;

Como vez son solo matemáticas, y muy precisas, por lo cual no pierdes nada, todo depende de como manejes la producción y que tan precisa la quieras, si quieres precision a costa de recursos del servidor, olvídate de usar PHP y mejor usa un lenguaje compilado que requiere de menos recursos y son mas óptimos para ese trabajo o en cambio prepara tu bolsillo/cartera para pagar el costo por trabajo excesivo del servidor...
__________________
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 =)
  #13 (permalink)  
Antiguo 22/10/2012, 00:12
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Como hacer el motor de un juego de navegador

U_U tienes idea si quiera que es Node.JS?, por lo que estoy leyendo en realidad no tienes ni idea sobre creación de juegos, Node.JS se usa para tener interacción y comunicación en tiempo real entre el servidor y el cliente, es mas, en realidad Node.JS es puro y simple Javascript potenciado para trabajar en ambos lados (servidor y cliente), aparte, por lo que veo tu quieres implementar la misma logica que se utilizaría en un videojuego que corre en local, y no es posible, son cosas diferentes, debes pensar que no tendrás 1 ni 10 jugadores, debes pensar en el futuro que puedes tener mas, si no optimizas el código tu proyecto se irá directamente a la basura por falta de optimización y preparación...
__________________
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 =)
  #14 (permalink)  
Antiguo 22/10/2012, 07:19
Avatar de Fylux  
Fecha de Ingreso: junio-2012
Mensajes: 141
Antigüedad: 11 años, 10 meses
Puntos: 9
Respuesta: Como hacer un cronjob cada segundo

Ok. gracias esto era lo que buscaba. Disculpa si he hecho demasiadas preguntas, pero he también he recibido demasiadas respuestas diferentes.

Saludos y gracias.
__________________
Si todos escribiéramos sin faltas de ortografía, el mundo sería un lugar mejor.

Etiquetas: cada, cronjob, formulario, juego, motor, navegador, segundo
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 13:22.