Pergunta

Eu gostaria de exibir atualizações em tempo real em uma página web (com base em um campo de status em uma tabela de banco de dados que é alterada por um processo externo). Baseado em minha pesquisa, existem várias maneiras de fazer isso.

  • Long Polling (Comet) - Este parece ser complexo para implementar
  • Polling Regular - Eu posso ter um gatilho método AJAX um banco de dados atingiu a cada 5 segundo para obter o status atual. Mas temo que isso terá problemas de desempenho.

Então eu li sobre o uso SqlCacheDependency - basicamente o cache fica invalidado com base em um campo na tabela. Estou assumindo que eu posso usar o evento trigerred quando o cache é invalidado para mostrar a nova atualização para o usuário?

O que é uma solução fácil que não terá problemas de desempenho?

Foi útil?

Solução

Em vez de polling o banco de dados uma abordagem mais escalável e performance seria a votação para a existência de um arquivo em seu servidor web, algo como um arquivo js leve. O conteúdo do arquivo não é importante, mas para lhe dar uma idéia de que você poderia ter um objeto JSON de algum tipo, que descreve em maior detalhe o resultado do processo.

Em seguida, o processo de fundo que está fazendo o processamento como a etapa final pode criar o arquivo ou chamar um serviço web em seu camada da web para fazer isso.

Veja como isso poderia funcionar.

Os usuários pressiona o botão que mensagens para o servidor

Servidor chutes de processo e retorna um identificador de exemplo C3201620-E622-4fe2-9F3A-E02FFA613F59

Web UI, em seguida, as pesquisas peridodically para a existência de C3201620-E622-4fe2-9F3A-E02FFA613F59.js, o javascript iria gerir o erro 404 e continuar a tentar até que ele recebe um 200

Espero que isso lhe dá algumas idéias.

Exemplo de código para lidar com 404 está em jQuery

$.ajax({
        url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json',
        type: "GET",
        success: function(result) {

        },
        error: function(request, status, error) {
        //handle error here and setTimeOut                 

        }); 

Outras dicas

Você tem 2 questões:

  1. recuperar os dados para empurrar
  2. Empurrando os dados para os clientes

O artigo # 1 é fácil, supondo que você tenha uma consulta bastante eficiente, e você não está consultando-lo para todos os usuários; apenas consulta, obter os dados, e empurrá-lo. Você pode usar a opção SqlDependency, ou você pode apenas sondar-lo; isso depende de como pesado seus dados estão.

Item # 2 é um pouco mais complicado, porque você precisa se quer acertar o servidor constantemente, ou usar um servidor de cometa. Nós escrevemos um servidor cometa .NET altamente escalável, WebSync , em cima da Congelado Montanha que poderia caber a conta. Essencialmente, você tem um processo separado que impulsiona a publicação e WebSync iria lidar com a empurrar os dados para seus clientes.

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