2008-10-29 16 views

Respuesta

5

El servidor continuará preparando la respuesta. Cuando intente enviar la respuesta al cliente, fallará. Cuando esto realmente suceda dependerá probablemente de la implementación real del servidor de aplicaciones, si la respuesta está almacenada en búfer, etc.

En servidores de aplicaciones Java EE (Tomcat y WebLogic, probablemente otros también), obtendrá la siguiente excepción:

java.net.SocketException: Connection reset by peer: socket write error 
0

Creo que la conexión TCP real está cerrada por el navegador y por lo tanto el servidor web no podrá enviar datos, y a menos que esté específicamente programado para detectar conexiones rotas mientras se preparan los datos, entonces la página será procesado completamente incluso si el usuario cancela.

Tengo poco conocimiento sobre estas cosas, pero esa sería mi suposición.

1

PHP comprende tres estados de conexión: NORMAL, ABORTADO y TIMEOUT. Puede cambiar la política de PHP en las conexiones ABORTED (de forma predeterminada, el script se finaliza) con la función ignore_user_abort(). Desde el notas sección:

"PHP no detectará que el usuario haya abortado la conexión hasta que se intente enviar información al cliente".

Tenga en cuenta que si la salida de su servidor está almacenada temporalmente, es posible que no se produzca un envío inmediatamente.

Ver PHP's page on connection handling para más detalles.

+0

¿Apache u otro webrowser está enviando el FIN/ACK a PHP? –

1

Si la conexión se interrumpió antes de que la solicitud se enviara por completo al servidor, el proceso de respuesta no se realizará.

Si la solicitud se envió por completo, esto desencadena el procesamiento del lado del servidor, y la generación de respuesta continuará a pesar de la conexión interrumpida.

En ASP.NET, puede detectar esto utilizando Response.IsClientConnected para detener el procesamiento si el cliente ya no está conectado, ahorrando tiempo de CPU y devolviendo el hilo inmediatamente al grupo de subprocesos.

Cuestiones relacionadas