Foros del Web » Programando para Internet » PHP »

chat php setInterval()

Estas en el tema de chat php setInterval() en el foro de PHP en Foros del Web. hola trato de hacer in chat en php con mysql y uso la función setInterval() para recargar la conversación de la ventana del chat. uso ...
  #1 (permalink)  
Antiguo 22/10/2013, 14:23
Avatar de kakashi20  
Fecha de Ingreso: septiembre-2009
Mensajes: 616
Antigüedad: 15 años, 1 mes
Puntos: 15
Exclamación chat php setInterval()

hola

trato de hacer in chat en php con mysql y uso la función setInterval() para recargar la conversación de la ventana del chat.

uso el setInterval() con 2 segundo de intervalo, pero esto tumba la conexión del servidor online, por las muchas peticiones que se hacen al servidor cada dos segundos.

como solucionar esto ?

si coloco el setInterval() a mas de 20 segundos, se demoraría mucho la recargada y no es lo ideal.

que me aconsejarían ?

gracias
  #2 (permalink)  
Antiguo 22/10/2013, 14:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: chat php setInterval()

Deberías usar websockets y mayor medida un lenguaje de servidor capacitado para ello, en cierto sentido PHP no es lo ideal para un chat.

Que claro, puede que el cuello de botella sea tu misma programación, ¿pero cómo averiguarlo?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 22/10/2013, 14:40
Avatar de kakashi20  
Fecha de Ingreso: septiembre-2009
Mensajes: 616
Antigüedad: 15 años, 1 mes
Puntos: 15
Respuesta: chat php setInterval()

este es mi codigo:

Código Javascript:
Ver original
  1. function ActualizarMensajes(){  
  2.                
  3.                     var str = "id_chat=<? echo $id_chat; ?>";
  4.  
  5.  
  6.                     $.ajax({
  7.            
  8.            
  9.                         type: 'POST',
  10.            
  11.            
  12.            
  13.                         url: 'ActualizarMensajes.php',
  14.            
  15.                        
  16.            
  17.                         data: str,
  18.            
  19.            
  20.            
  21.                         success:function(msg){
  22.            
  23.            
  24.            
  25.                                    
  26.                                    
  27.                                         $("#div_conversacion").html(msg);  
  28.                                        
  29.                                
  30.              
  31.                    
  32.                         }
  33.            
  34.            
  35.            
  36.                     });
  37.                    
  38.                     //setTimeout(ActualizarMensajes,1000);
  39.  
  40.                
  41.                
  42.                 }
  43.  
  44. $(document).ready(function() {  
  45.  
  46.  
  47.                
  48.    
  49.            
  50. setInterval("ActualizarMensajes()", 2000 );  
  51.            
  52. //setTimeout(ActualizarMensajes,1000);             
  53.                
  54.                
  55. });


Código PHP:
Ver original
  1. include ('lib/ClaseBaseDatos.php');
  2.  
  3.     $conexion = new ConexionBaseDatos;
  4.  
  5.     $link = $conexion->Conectarse($conexion);
  6.    
  7.     $id_chat = $_POST['id_chat'];
  8.    
  9.    
  10.     $sql = "select * from chat_mensajes WHERE id_chat = '".$id_chat."' order by id desc";
  11.  
  12.     $query_sql = mysql_query($sql);
  13.    
  14.    
  15.     for ($i=0;$i<mysql_num_rows($query_sql);$i++){
  16.        
  17.         echo "<div style='color:#333; font-weight:bold'>".mysql_result($query_sql,$i,"who")." - <span style='font-style:italic; font-size:10px; color:#f00'>".mysql_result($query_sql,$i,"fec")."</span> : </div><div>".mysql_result($query_sql,$i,"mensaje")."</div><br>";
  18.        
  19.        
  20.     }


como pueden ver, también intente con setTimeOut, llamandola a ella misma, pero igual también me tumbo la conexión.

tengo esto en el hosting ultimate de goddady.

si me pudiesen ayudar o aconsejar se los agradecería.
  #4 (permalink)  
Antiguo 22/10/2013, 14:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: chat php setInterval()

Bueno, en primer lugar es poco óptimo hacer un SELECT por todos los comentarios cada vez, ¿o no piensas que eso es un grave problema?

Es decir, es la misma consulta siempre, que aunque haya nuevos comentarios es innecesariamente ridículo consultar por todo siempre.

Desde ahí ya tienes con qué pensar.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 22/10/2013, 15:02
Avatar de kakashi20  
Fecha de Ingreso: septiembre-2009
Mensajes: 616
Antigüedad: 15 años, 1 mes
Puntos: 15
tienes razon pateketrueke, error de optimizacion y principiante..

lo optimice y lo coloque a 5 segundos y hasta ahora esta bien...

gracias pateketrueke

mmm.. luego de un cierto tiempo prolongado se cayo la conexión de nuevo.. esta vez duro mas que al principio cuando no se había optimizado la consulta.

ahora, que podría ser esto ?

Última edición por Triby; 22/10/2013 a las 19:47
  #6 (permalink)  
Antiguo 22/10/2013, 19:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: chat php setInterval()

Como te dijo @pateketrueke (que parece que no quieres leer) setInterval/PHP no es lo mejor para un chat, lo mejor es usar WebSockets con algún otro lenguaje más optimizado para esto como node.js

Saludos.
  #7 (permalink)  
Antiguo 22/10/2013, 20:56
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: chat php setInterval()

Me meto en la discusión con respecto a lo que decía @pateketrueke de que PHP no es ideal para esto, y @GatorV dice que node.js es bueno para el tema, pero que otros lenguajes podrían revolverse bien con un chat para el lado del server? que tal java?
  #8 (permalink)  
Antiguo 22/10/2013, 20:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: chat php setInterval()

JAVA es excelente, si lo haces con Groovy mucho mejor, definitivamente es buena opción.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 22/10/2013, 21:03
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: chat php setInterval()

Y se puede saber porque es mejor? digo hay alguna web fuente official o algo que me diga que java tiene buen rendimiento del lado del server MAS que php, y lo mismo tal vez para otros lenguajes, algo como una estadística del rendimiento de algunos lenguajes del lado del server, me gustaría saber, gracias por tu respuesta
  #10 (permalink)  
Antiguo 22/10/2013, 21:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: chat php setInterval()

Pues la primer y gran diferencia es que la JVM (la máquina virtual de JAVA) es excelente, ¿si sabes que Twitter pasó de usar Ruby a Scala? Scala es un lenguaje que corre también sobre la JVM.

Es decir, el poder radica en la JVM básicamente, inclusive puedes compilar código PHP para ejecutarse sobre la JVM.

Más allá del lenguaje tiene que ver con el entorno de ejecución (run-time) y el de PHP no es fácil, pues la naturaleza stateless del lenguaje lo convierte en un enemigo natural para aplicaciones en tiempo real y de alto rendimiento.

A mi en lo personal no me gusta programar en JAVA (prefiero usar Groovy), pero cuando entendí lo de la JVM se aclaró todo.

Hablando de Node.js debo decir que también es un excelente candidato, a pesar de que Javascript per se es complicado, la naturaleza del lenguaje non-blocking/event-driven lo convierten en el perfecto candidato para comunicación en tiempo real.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 23/10/2013, 08:37
Avatar de kakashi20  
Fecha de Ingreso: septiembre-2009
Mensajes: 616
Antigüedad: 15 años, 1 mes
Puntos: 15
Respuesta: chat php setInterval()

gracias por la ayuda prestada.

node.js seria buena opción, pero tocaría instalarlo de manera local. Por lo que he visto, en un hosting online no esta optimo aun, a menos que ese hosting online tenga instalado eso.
  #12 (permalink)  
Antiguo 23/10/2013, 09:49
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: chat php setInterval()

Sino me equivoco el proveedor de hosting de este foro tiene planes con todo preparado para node.js, si queres contactate con algún administrador del foro que tal vez te pueda ayudar mejor, no puedo decir el nombre por acá de la empresa por las dudas.
  #13 (permalink)  
Antiguo 23/10/2013, 09:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: chat php setInterval()

Puedes usar Heroku, ahí si hay soporte para Node.js
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 23/10/2013, 16:22
Avatar de kakashi20  
Fecha de Ingreso: septiembre-2009
Mensajes: 616
Antigüedad: 15 años, 1 mes
Puntos: 15
Exclamación Respuesta: chat php setInterval()

que pasaría si en vez de una BD, utilizo un archivo plano .txt como almacenamiento ?

habría mejor rendimiento ?
  #15 (permalink)  
Antiguo 23/10/2013, 16:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: chat php setInterval()

Cita:
Iniciado por kakashi20 Ver Mensaje
que pasaría si en vez de una BD, utilizo un archivo plano .txt como almacenamiento ?

habría mejor rendimiento ?
Por supuesto que no, eso sería de lo peor.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: chat, mysql
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 12:46.