Será que uma solicitação HTTP, preencha todos?

votos
1

Se uma solicitação HTTP é feita e o chamador abandona o pedido ele ficar concluída de qualquer maneira? Por exemplo, uma solicitação assíncrona GET JavaScript para registrar um banner clique no DB em seguida, redirecionar. Será que o script precisa esperar pela resposta?

Publicado 26/08/2009 em 23:47
fonte usuário
Em outras línguas...                            


5 respostas

votos
3

Como crítico é o seu pedido? E se o banco de dados não está disponível naquele tempo? E se o código do lado do servidor gera uma exceção?

Para solicitações muito críticos, pode ser necessário implementar algum tipo de enfileiramento de mensagens que é capaz de manter os dados da solicitação até que possa ser completamente processado. Isto torna-se mais complicado se você está lidando com grades e nuvens (você não pode simplesmente fila a mensagem em um único nó, uma vez que o nó pode, potencialmente, ter uma falha de hardware). Mas este é um caso extremo, onde você acabar com servidores de filas dedicadas.

Respondeu 27/08/2009 em 00:06
fonte usuário

votos
2

Para a maioria dos casos, uma vez que o pedido é recebido pelo servidor, ele não vai parar o processamento se o cliente deixa de ouvir.

No entanto, o servidor sempre pode falhar enquanto atende o pedido, por isso provavelmente não é uma boa idéia para assumir completou.

Respondeu 26/08/2009 em 23:54
fonte usuário

votos
2

O cliente não envia qualquer notificação para o servidor que está a cancelar a solicitação.

PHP não sabe se o cliente foi desconectado até que ele tenta enviar o cliente alguns dados (por exemplo., Um unbuffered echo()chamada), por isso, se o seu script não retorna os dados para o usuário, ele irá executar plenamente. Se ele retornar dados pode abortar a meio, mas isso pode ser alterado com ignore_user_abort()) Se você estiver usando um ambiente diferente, você terá que explorar a documentação.

Respondeu 26/08/2009 em 23:54
fonte usuário

votos
1

Você não tem que esperar a resposta para que o pedido para alcançar o servidor. O servidor pode verificar se alguém ainda está ouvindo ao processar o pedido, mas o processamento do pedido será iniciado mesmo se ninguém está escutando para a resposta (a menos que houvesse um erro no caminho, é claro).

Se você quer ter certeza de que o pedido realmente foi processado, você deve esperar a resposta, mas não é necessário para a solicitação para passar para o servidor.

Respondeu 27/08/2009 em 00:16
fonte usuário

votos
1

Você deve esperar por ele para ser seguro. Você nunca sabe quando o servidor vai dar a volta a processar o seu pedido (embora seja geralmente dentro de algumas centenas de milissegundos ou menos), então você não vai saber se algo expirou, com falha ou se você estava indo para receber uma resposta diferente do que o esperado a menos que você esperar.

Respondeu 26/08/2009 em 23:51
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more