Normalmente, você não pode detectar uma conexão interrompida até começar a escrever de volta para o usuário. Caso contrário, seu processo continuará fazendo seu trabalho sem perceber a interrupção da conexão do lado do usuário. Este post está relacionado mesmo que fale sobre PHP. O conceito deve ser o mesmo.
Existem coisas possíveis que você pode tentar:
- Faça o trabalho demorado em segundo plano. Quando um usuário solicita o CGI, não execute a tarefa como uma chamada de bloqueio normal. Basta retornar qualquer coisa ao usuário para informar que a solicitação está sendo processada. É claro que você precisa encontrar alguma maneira de atualizar a exibição ou fornecer outra página para verificar o status da tarefa usando algum ID de solicitação ou IP.
- Envie os dados de volta ao cliente o mais rápido possível e saia se não enviar (indicação de conexão interrompida). Você pode, por exemplo, enviar o progresso do trabalho a cada poucos segundos ou minutos.
Se você salvar os trabalhos atualmente em execução em um banco de dados, poderá salvar o ID da solicitação e / ou o endereço IP do cliente. Assim, você pode detectar e ignorar solicitações duplicadas para o mesmo recurso informando ao usuário "o seu pedido está sob processamento".