Perda de sinal de cancelamento de contexto em solicitações HTTP com corpo
Ao desenvolver um servidor HTTP em Go, surgiu uma preocupação: o context.Done( ) falha ao capturar sinais de desconexão do cliente para solicitações com um corpo. Esse comportamento era diferente das solicitações GET, que detectaram com êxito as saídas do cliente.
Causa subjacente
Essa inconsistência decorre do funcionamento do servidor net/http. Seu mecanismo de verificação de conexão é iniciado somente quando o aplicativo lê o corpo da solicitação. Como as solicitações GET não possuem corpo, a verificação da conexão é acionada imediatamente, permitindo que o servidor detecte prontamente o cancelamento do cliente. No entanto, para solicitações POST, o servidor espera até que o corpo seja lido antes de iniciar as verificações de conexão.
Solução
Para resolver esse problema, é necessário ler manualmente o corpo da solicitação para estimular o processo de verificação de conexão do servidor. O trecho de código a seguir demonstra isso:
func handler(w http.ResponseWriter, r *http.Request) { go func(doneAo ler explicitamente o corpo da solicitação, o servidor pode detectar desconexões do cliente imediatamente, mesmo para solicitações com corpo. Isso permite a limpeza adequada e a liberação de recursos no lado do servidor.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3