Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/07/2009, 15:21
Avatar de _eNGeLs_
_eNGeLs_
 
Fecha de Ingreso: noviembre-2007
Ubicación: CDE, Paraguay
Mensajes: 278
Antigüedad: 16 años, 5 meses
Puntos: 4
Abortar conexion ajax al enviar otro request

En el servidor, con php hago un loop infinito hasta que se cumpla cierta condicion, el tiempo maximo de ese loop es de 20 segundos, despues de eso cierra la conexion enviando un 'timeout' como respuesta. Luego, se vuelve a crear una conexion y asi.

El problema es este:
Cuando se hace un request, el servidor hace el loop, y si el usuario hace otro request cuando todavia no se cerro la conexion anterior, el servidor espera a que primero se cierre la conexion anterior para procesar la nueva. (Estoy usando Apache en linux).

Una posible solucion:
Al realizar el segundo request se aborte el primero.
Creo necesito usar el metodo abort() del objeto 'rpc'
Pero no se donde deberia ir eso..

alguna ayuda??

Código:
function sendRequest()
{
    var rpc=aj();
    if(rpc){
        rpc.open('POST','center.php',true);
        rpc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        var aEnviar='';
        for(ii=0; ii<arguments.length;ii++){
            aEnviar+=arguments[ii].desc+'='+encodeURIComponent(arguments[ii].dato)+'&';
        }
        rpc.onreadystatechange=function(){
            if(rpc.readyState==4){
                    if(rpc.status >= 200 && rpc.status < 300)
                    {
                        //Handle Response
                        handleResponse(rpc.responseText);
                    }else{
                        alert('Se perdio la conexion');
                    }
            }else{
                //precarga
            }
        }
        rpc.send(aEnviar);
    }
}
function aj(){
    if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }
    else{
        try{
            return new ActiveXObject('Microsoft.XMLHTTP');
        }catch(e){
            alert('tu navegador no soporta ajax');
            return false;
        }
    }
}
__________________