Foros del Web » Programando para Internet » PHP »

Problema con el famoso Flush() y Ajax

Estas en el tema de Problema con el famoso Flush() y Ajax en el foro de PHP en Foros del Web. Buenas a todos. Estoy teniendo problemas al intentar hacer un chat en php con Ajax por algo que segun veo por internet buscando es bastante ...
  #1 (permalink)  
Antiguo 03/08/2012, 05:30
 
Fecha de Ingreso: mayo-2011
Mensajes: 74
Antigüedad: 12 años, 11 meses
Puntos: 2
Pregunta Problema con el famoso Flush() y Ajax

Buenas a todos.

Estoy teniendo problemas al intentar hacer un chat en php con Ajax por algo que segun veo por internet buscando es bastante comun que pase, y que mientras mucha gente lo ha resuelto yo no he conseguido nada aun :S..

La cosa es que el chat se conecta correctamente y mediante Ajax (usando Jquery) se lanza la llamada asincrona que va a un bucle infinito el cual si hay mensajes nuevos les envia mediante echo(.... y justo despues de este echo hace un flush para que supuestamente lo reciba Ajax y lo pinte en pantalla, la cosa es que no lo hace hasta que sale del bucle, cosa que es logica pero no es el funcionamiento que quiero, si no que en cada iteracion del bucle javascript reciba ese echo y lo dibuje.

He probado modificando el php.ini con output_buffering = off


y en el documento .php que tiene el bucle infinito he puesto al principio lo siguiente:

Código:
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
y nada por ahora.

El codigo javascript es el siguiente:

Código:
function conectarChat()
{
	$.ajax({
			type: "POST",
 		  	url: "scripts/php/xchatservercore.php",
   			data: "user=xuturk",
   			complete: function(jqXHR, textStatus) 
    		{
      		alert(textStatus.responseText);
    		},
   			success: function(msg)
			{
			alert(msg);
				//Si llegamos aqui quiere decir que el chat se ha desconectado.
				chatConectado = false;
				$("#lblstatus").html("Chat Desconectado"); 
    		},
    		error: function()
    		{
    			alert("Error de conexion");
    		}
  		});
  		chatConectado = true;
  		$("#lblstatus").html("Chat Conectado"); 
}
Como veis unicamente quiero que salte el mensaje para ver que funciona, con eso me vale.

Y el codigo php del bucle es el siguiente:

Código:
	//Una vez conectado configuramos el bucle infinito:
	set_time_limit(0);
	header("Edge-control: no-store");
	echo("Entrando");
	flush();
	ob_flush();
	//Bucle infinito que escucha nuevos mensajes:
	while($userconnected)
	{
		ob_start();
		//Mientras comprobamos si hay mensajes nuevos:
		echo("asdf");
		ob_flush();
		flush();
		sleep(1);
	}
Espero que me podais echar una mano.

Muchas gracias.

Un saludo.
  #2 (permalink)  
Antiguo 03/08/2012, 07:27
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Problema con el famoso Flush() y Ajax

no puedes poner un bucle infinito en el php.

ponlo en el javascript
has que la funcion verifique nuevos mensajes y cuando termine simplemente dentro de la misma funcion vuelves a llamar a la funcion con javascript.

la funcion flush no esta echa para eso.
  #3 (permalink)  
Antiguo 03/08/2012, 11:18
 
Fecha de Ingreso: mayo-2011
Mensajes: 74
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Problema con el famoso Flush() y Ajax

Muchas gracias, pensaba que deberia servir igualmente pero bueno, la logica dice que no deberia ser asi, no me gusta mucho la idea de enviar peticiones cada dos por tres desde javascript pero realmente es lo suyo, voy a ponerme a ello, muchas gracias :D
  #4 (permalink)  
Antiguo 03/08/2012, 12:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con el famoso Flush() y Ajax

Lo correcto para hacer eso que quieres, es usar un servidor COMET y usar lo que se conoce como HTTP Push para tener un chat en tiempo real
  #5 (permalink)  
Antiguo 04/08/2012, 04:41
 
Fecha de Ingreso: mayo-2011
Mensajes: 74
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Problema con el famoso Flush() y Ajax

Ya imagino, en su dia mira hacerlo con node, pero me parecio un coñazo y mas cuando estoy tan acostumbrado a usar php, despues mire los sockets de php con algun programa de servidor y puf me quede en las mismas me volvi loco y no consegui nada, meterme en algun framework con comet que ademas no conozco ninguno... me retrasaria bastante, creo que hare lo que me comento enlinea777 de todos modos muchas gracias por el consejo :D

Un saludo :)

Etiquetas: ajax, asincrono, chat, flush
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 17:57.