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;
}
?>
Práctico, pero este es un sitio de preguntas y respuestas, no un vertedero de consejos. –
@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
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