2012-05-08 7 views
7

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; 
} 

?> 
+2

Handy, ma questo è un sito di domande e risposte, non una discarica di suggerimenti. –

+7

@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

+0

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

risposta

1

Il "connection_aborted" la funzione in PHP risolverà il vostro problema.

È possibile visualizzare la sintassi della funzione con esempi di utilizzo in questo link.

Problemi correlati