Existe alguma maneira de PUSH dados do servidor web para o navegador?

É claro que estou ciente do Ajax, mas o problema com o Ajax é que o navegador deve pesquisar o servidor frequentemente para descobrir se há novos dados. Isso aumenta a carga do servidor.

Existe algum método melhor (mesmo usando Ajax) além de pesquisar o servidor com freqüência?

    Sim, o que você está procurando é COMET http://en.wikipedia.org/wiki/Comet_(programming) . Outros bons termos do Google para pesquisar são AJAX-push e reverse-ajax.

    Sim, é chamado Reverse Ajax ou Comet . Cometa é basicamente um termo genérico para diferentes maneiras de abrir solicitações HTTP de longa duração para enviar dados em tempo real para um navegador da web. Eu recomendaria o StreamHub Push Server , eles têm algumas demonstrações interessantes e é muito mais fácil começar do que qualquer outro servidor. Confira o tutorial Introdução ao Comet e StreamHub para uma introdução rápida. Você pode usar o Community Edition que está disponível para download gratuito, mas está limitado a 20 usuários simultâneos. A versão comercial vale a pena apenas pelo suporte, além de obter os adaptadores clientes SSL e Desktop .NET e Java. A ajuda está disponível através do Grupo do Google , há um bom grupo de tutoriais na net e também há um adaptador GWT Comet .

    Hoje em dia você deve usar WebSockets. Este é o padrão de 2011 que permite iniciar conexões com HTTP e, em seguida, atualizá-las para comunicação bidirecional cliente-servidor baseada em mensagens.

    Você pode facilmente iniciar a conexão a partir do javascript:

    var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any"); ws.onmessage = function (evt) { var message = evt.data; //decode message (with JSON or something) and do the needed }; 

    O manuseio do lado do servidor depende da sua pilha de tenchnology.

    Olhe para o Cometa (uma paródia do fato de que o Ajax é um agente de limpeza e também o Cometa) que é basicamente “Ajax reverso”. Esteja ciente de que isso requer uma conexão de servidor de longa duração para cada usuário receber notifications, por isso, esteja ciente das implicações de desempenho ao criar seu aplicativo.

    http://en.wikipedia.org/wiki/Comet_(programming)

    Cometa é definitivamente o que você quer. Dependendo dos seus requisitos de idioma / estrutura, existem diferentes bibliotecas de servidores disponíveis. Por exemplo, o WebSync é um servidor cometa integrado ao IIS para desenvolvedores ASP.NET/C#/IIS , e também há vários outros servidores autônomos se você precisar de uma integração mais estreita com outros idiomas.

    Eu sugiro fortemente investir algum tempo no Cometa, mas eu não sei uma implementação real ou biblioteca que você poderia usar.

    Para uma espécie de “painel de controle do callcenter” de um aplicativo da web que envolvia atualização de agentes e status de fila de chamadas para um Callcenter ativo, desenvolvemos uma solução interna que funciona, mas está longe de uma biblioteca que você poderia usar.

    O que fizemos foi implementar um pequeno serviço no servidor que fala com o sistema telefônico, espera por novos events e mantém uma fotografia da situação. Este serviço fornece um pequeno servidor web.

    Nossos clientes web se conectam via HTTP a este servidor web e perguntam pela última foto (codificada em XML), a exibe e depois vai novamente, pedindo a nova foto. O servidor da Web neste momento pode:

    • Devolver a nova foto, se houver uma
    • Bloqueie o cliente por alguns segundos (30 em nossa configuração) esperando que algum evento ocorra e mude a fotografia. Se nenhum evento foi gerado nesse ponto, ele retornará a mesma foto, apenas para permitir que a conexão permaneça ativa e não limite o tempo do cliente.

    Dessa forma, quando os clientes realizam pesquisas, obtém uma resposta em 0 a 30 segundos no máximo. Se um novo evento já foi gerado, ele o obtém imediatamente), caso contrário, bloqueia até que um novo evento seja gerado.

    É basicamente polling, mas é um pouco inteligente polling para não superaquecer o servidor web. Se o Cometa não for sua resposta, tenho certeza de que isso poderia ser implementado usando a mesma ideia, mas usando mais extensivamente AJAX ou codificação em JSON para obter melhores resultados. Isso foi projetado na era pré-AJAX, então há muito espaço para melhorias.

    Se alguém puder fornecer uma implementação leve e simples disso, ótimo!

    Uma alternativa interessante ao Comet é usar sockets no Flash.

    Ainda outra maneira padrão é o SSE (Eventos enviados pelo servidor, também conhecido como EventSource , após o object JavaScript).

    Cometa foi realmente inventado por Alex Russell do Dojo Toolkit ( http://www.dojotoolkit.org ). Aqui está um link para mais infomration http://cometdproject.dojotoolkit.org/

    Existem outros methods. Não tenho certeza se eles são “melhores” na sua situação. Você poderia ter um applet Java que se conecta ao servidor no carregamento da página e espera que o material seja enviado pelo servidor. Seria um pouco mais lento na boot, mas permitiria que o navegador recebesse dados do servidor em uma base pouco frequente, sem pesquisa.

    Você pode usar um aplicativo Flash / Flex no cliente com BlazeDS ou LiveCycle no lado do servidor. Os dados podem ser enviados para o cliente usando uma conexão RTMP. Esteja ciente de que o RTMP usa uma porta não padrão. Mas você pode facilmente voltar ao polling se a porta estiver bloqueada.

    É possível conseguir o que você está mirando através do uso de conexões http persistentes.

    Confira o artigo do Comet na wikipedia, que é um bom lugar para começar.

    Você não está fornecendo muitas informações, mas se você está pensando em construir algum tipo de site voltado para events (a’la digg spy) ou algo parecido com isso, você provavelmente estará olhando para implementar um IFRAME oculto que se conecta a uma url em que a conexão nunca é fechada e, em seguida, você enviará as tags de script do servidor para o cliente para executar as atualizações.

    Pode valer a pena conferir o Meteor Server, que é um servidor web projetado para o COMET. Bom demo e também é usado por twitterfall .

    Uma vez que uma conexão é aberta para o servidor, ela pode ser mantida aberta e o servidor pode empurrar conteúdo há muito tempo atrás, usando multipart/x-mixed-replace mas isso não funcionou no IE.

    Eu acho que você pode fazer coisas inteligentes com polling que faz com que ele funcione mais como push, por não enviar headers de conteúdo inalterados, mas deixando a conexão aberta, mas eu nunca fiz isso.

    Você poderia experimentar o nosso componente Comet – embora seja extremamente experimental …!

    por favor, verifique esta biblioteca https://github.com/SignalR/SignalR para saber como enviar dados para os clientes dinamicamente assim que estiverem disponíveis

    Você também pode examinar os Java Pushlets se estiver usando páginas jsp.

    Pode querer olhar para ReverseHTTP também.