Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Leguim en 24 Octubre 2019, 01:38 am



Título: [Pregunta]: Ejecutar esta consulta constantemente
Publicado por: Leguim en 24 Octubre 2019, 01:38 am
Buenas noches,
¿Como podría ejecutar esta consulta de una forma constante?

Mark_Disconnected()

Código
  1.        function Mark_Disconnected()
  2. {
  3. $timestamp_now = date('Y-m-d H:i:s');
  4. $timestamp_now = strtotime('-15 minutes', strtotime($timestamp_now));
  5. $timestamp_now = date('Y-m-d H:i:s', $timestamp_now);
  6.  
  7. $con = Connection('A', 'B');
  8. $query = $con->prepare('UPDATE users SET connected = 0, sid = null WHERE connected = 1 AND '.($timestamp_now).' >= last_activity');
  9. $query->execute();
  10. }
  11.  

La idea es hacerlo sin sockets, una de las soluciones podría ser un timeout de javascript que llama a una función ajax y una vez que se complete la solicitud "success:" se inicia otro timeout con la misma función... No se si esto está bueno o se sobre carga el servidor.

Realmente es algo con lo que estoy renegando hace rato ya.


Título: Re: [Pregunta]: Ejecutar esta consulta constantemente
Publicado por: mchojrin en 7 Noviembre 2019, 13:50 pm
No lo veo mal en principio.

Sobre el tema de la sobrecarga, dependerá de cuánto sea el timeout y cuánta concurrencia tengas


Título: Re: [Pregunta]: Ejecutar esta consulta constantemente
Publicado por: [u]nsigned en 15 Noviembre 2019, 00:17 am
Desde el vamos tenes un gran problema, y es que el protocolo HTTP 1.1 esta pensado y diseñado para ser desconectado:
se abre la conexion, se recibe la peticion HTTP, se procesa, en envia la respuesta HTTP y se cierra la conexion.

Por eso surgieron cosas como Socket.io para mantener una conexión activa. Eso de tirar de ajax dentro de un timeout solo da problemas, no tanto en el server sino en el propio cliente, por la naturaleza asíncrona de JS. Si no esta perfectamente programado y diseñado vas a terminar desbordando la cola de mensajes de JS (messages queue). Y ni hablar de los posibles huecos de seguridad que suponen llevar toda al logica de tu aplicacion a un simple timeOut que sera enviado en limpio al cliente.

Podrias llegar a usar ajax + timeOut, pero tendrias que hacer todo de forma sincrona y te digo que dominar la asincronia de js es mas difícil que dominar socket.io  :xD

Por que no queres usar sockets que es justo la herramienta que necesitas implementar?  :silbar: