Recentemente abbiamo avuto la necessità di rilevare quando un client abortito/scollegato bruscamente da un server. Con bruscamente intendo non necessariamente attraverso il ARRESTO pulsante di un browser, in realtà, il cliente era un messaggio SOAP inviato tramite POST (usando soapUI), di conseguenza, la disconnessione potrebbe essere semplice come l'arresto (Ctrl + C) il cliente prima di ricevere una risposta. Abbiamo passato giorni a cercare una soluzione, finché non abbiamo scoperto come. Quindi, forse questa potrebbe essere una domanda con una risposta implicita, ma l'obiettivo è fornire informazioni che possano aiutare molte altre persone là fuori con la stessa necessità.Rileva interruzione utente disconnessione/client in PHP
Ecco il codice di base che abbiamo usato il nostro server al fine di rilevare la disconnessione del client:
<?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;
}
?>
Handy, ma questo è un sito di domande e risposte, non una discarica di suggerimenti. –
@MarcB [È corretto chiedere e rispondere alle proprie domande] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/). @ Norberto: non dovresti includere la soluzione nella domanda stessa, ma pubblicarla come risposta. – lortabac
Per me questa è solo una documentazione ridondante per il documento php. Inoltre, la risposta alla tua domanda è semplicemente "Controlla il risultato della funzione connection_status()". – mosch