Pergunta

Contexto:Na minha interface do usuário do JavaScript, iniciei uma operação de longa data (vários minutos) realizada no back-end .NET2.0. A chamada retorna imediatamente com o ID da operação enquanto a operação de longa duração é paralela. As operações não são intensivas em CPU, mas realizam chamadas lentas em rede. Depois que a operação é concluída, quero ver os resultados na interface do usuário da web.

Pergunta: Como posso notificar o cliente quando o trabalho é feito?

Opções que considerei:

Opção 1: Eu inicio a operação de longa duração diretamente do JS e espero que o valor de retorno seja o EndResult em vez de um ID da operação. Minha biblioteca Ajax cuida de tudo, e a vida parece muito fácil e arrumada. O problema é que no lado do servidor O tópico é um fio Threadpool que agora traço por vários minutos. Você não precisa de muitas solicitações paralelas de longa duração para fazer com que o Threadpool fome e leve o servidor inteiro até os joelhos, mesmo que haja energia de processamento suficiente.

opção 2: Com o ID da operação, começo a pesquisar o servidor se a operação for concluída. No entanto, este é um ataque de negação de serviço contra meu próprio servidor. Além disso, deve haver uma solução justa de Ajax para ela. Este não é um problema único.

Foi útil?

Solução

Verificação de saída WebSync, uma implementação do cometa para .NET. Deve ser exatamente o que você está procurando.

Outras dicas

A pesquisa, se feita corretamente, não terá um efeito perceptível na carga do servidor. Você deve personalizar o intervalo para melhor cobrir as especificidades do trabalho do seu servidor - por exemplo, não pesquise no servidor por pelo menos 2 minutos se souber que a operação geralmente leva mais tempo. Mesmo depois disso, você escolhe um intervalo grande o suficiente - por exemplo, 10 segundos. O uso de uma solicitação de serviço da Web ou um manipulador personalizado minimizará o tráfego e o tempo do servidor necessário para processar a solicitação.

Talvez o Ajax reverso seja útil se você não terá muitos clientes simultâneos. Isso às vezes é chamado de cometa.

Ajax reverso refere-se a um padrão de design do Ajax que usa conexões HTTP de vida longa para permitir a comunicação de baixa latência entre um servidor da Web e um navegador. Basicamente, é uma maneira de enviar dados do cliente para o servidor e um mecanismo para empurrar os dados do servidor de volta ao navegador (o que você precisa).

http://en.wikipedia.org/wiki/reverse_ajax

Parece que pode atender às suas necessidades, eu apenas o usei e funcionou muito bem.

Que tal ter um iframe escondido (ou pequeno) executar o script de longa duração e fazer javascript para verificar apenas o conteúdo do iframe? Por exemplo, o script grava ID no iframe no final.

Sua opção 2 é exatamente o que eu fiz antes. Use o setTimeout para limitar sua pesquisa a cada 30 segundos ou mais.

o Estrutura de icefaces fornece um Ajax Push tecnologia. Eles apoiam Processamento de solicitação assíncrona escalável Em vários servidores de aplicativos, como Jetty, Tomcat e Glassfish.

Embora isso seja tudo o material Java, pode ajudar a encontrar os termos de pesquisa certos para o Google.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top