2012-05-08 14 views
7

Recientemente hemos tenido la necesidad de detectar cuando un cliente abortado/desconecta bruscamente desde un servidor. Por de pronto no me refiero necesariamente a través de la botón PARADA de un navegador, en realidad, el cliente era un mensaje SOAP enviado a través del poste (usando soapUI), por lo tanto, la desconexión podría ser tan simple como dejar de (Ctrl + C) el cliente antes de recibir una respuesta. Pasamos días tratando de encontrar una solución, hasta que descubrimos cómo. Entonces, esta podría ser una pregunta con una respuesta implícita, pero el objetivo es proporcionar información que pueda ayudar a muchas otras personas con la misma necesidad.cancelación del usuario Desconexión/cliente en PHP

Aquí es el código básico que utilizamos nuestro servidor con el fin de detectar la desconexión del cliente:

<?PHP 
ignore_user_abort(true);   // Continue running the script even when the client aborts/disconnects 

sleep(5);       // Sleep 5 seconds so we can stop the client before it recieves a reponse from the server 

echo "RESPONSE sent to the client"; // Response to the Request 
ob_flush();       // Clean output buffer 
flush();       // Clean PHP's output buffer 
usleep(500000);      // Sleep half a second in order to detect if Apache's server sent the Response 
echo " ";       // Echo a blank space to see if it could be sent to the client 
ob_flush();       // Clean output buffer 
flush();       // Clean PHP's output buffer 

if(connection_status() != 0) {  // Client aborted/disconnected abruptly 
    return -1; 
} 
else {        // Client recieved the response correctly 
    return 0; 
} 

?> 
+2

Práctico, pero este es un sitio de preguntas y respuestas, no un vertedero de consejos. –

+7

@MarcB [Está bien que preguntes y respondas tus propias preguntas] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/). @ Norberto: No debe incluir la solución en la pregunta en sí, sino publicarla como respuesta. – lortabac

+0

Para mí, esta es solo una documentación redundante para el documento php doc. Además, la respuesta a su pregunta simplemente es "Compruebe el resultado de la función connection_status()". – mosch

Respuesta

1

El "connection_aborted" función en PHP va a resolver su problema.

Puede ver la sintaxis de la función con ejemplos de usos en este link.

Cuestiones relacionadas