¿Hay alguna manera de PULSAR datos del servidor web al navegador?

Por supuesto, estoy al tanto de Ajax, pero el problema con Ajax es que el navegador debe sondear el servidor con frecuencia para determinar si hay datos nuevos. Esto aumenta la carga del servidor.

¿Hay algún método mejor (incluso el uso de Ajax) que no sea interrogar al servidor con frecuencia?

Sí, lo que estás buscando es COMET http://en.wikipedia.org/wiki/Comet_(progtwigción) . Otros buenos términos de Google para buscar son AJAX-push y reverse-ajax.

Sí, se llama Reverse Ajax o Comet . Comet es básicamente un término general para diferentes formas de abrir solicitudes HTTP de larga duración con el fin de enviar datos en tiempo real a un navegador web. Recomendaría StreamHub Push Server , tienen algunas demostraciones geniales y es mucho más fácil de empezar que cualquiera de los otros servidores. Consulte el tutorial Getting Started with Comet and StreamHub para una introducción rápida. Puede utilizar Community Edition, que está disponible para descargar de forma gratuita pero está limitado a 20 usuarios simultáneos. La versión comercial vale la pena solo por el soporte, además de obtener adaptadores de cliente SSL y Desktop .NET y Java. La ayuda está disponible a través del Grupo de Google , hay un buen grupo de tutoriales en la red y también hay un adaptador GWT Comet .

Hoy en día deberías usar WebSockets. Este es el estándar de 2011 que permite iniciar conexiones con HTTP y luego actualizarlas a una comunicación bidireccional entre cliente y servidor basada en mensajes.

Puede iniciar fácilmente la conexión desde 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 }; 

El manejo del lado del lado depende de su stack de tecnología.

Mire en Comet (una parodia en el hecho de que Ajax es un agente de limpieza y también lo es Comet) que es básicamente “Ajax inverso”. Tenga en cuenta que esto requiere una conexión de servidor de larga duración para que cada usuario reciba notificaciones, así que tenga en cuenta las implicaciones de rendimiento al escribir su aplicación.

http://en.wikipedia.org/wiki/Comet_(progtwigción)

Comet es definitivamente lo que quieres. Dependiendo de los requisitos de tu lenguaje / framework, hay diferentes bibliotecas de servidores disponibles. Por ejemplo, WebSync es un servidor de cometas integrado en IIS para desarrolladores de ASP.NET/C#/IIS , y hay muchos otros servidores independientes también si necesita una integración más estrecha con otros lenguajes.

Le sugiero encarecidamente invertir algo de tiempo en Comet, pero no conozco una implementación o biblioteca real que pueda usar.

Para una especie de “panel de control de callcenter” de una aplicación web que implicaba actualizar el agente y el estado de la cola de llamadas para un Callcenter en vivo, desarrollamos una solución interna que funciona, pero está muy lejos de una biblioteca que podría usar.

Lo que hicimos fue implementar un pequeño servicio en el servidor que habla con el sistema telefónico, espera nuevos eventos y mantiene una fotografía de la situación. Este servicio proporciona un pequeño servidor web.

Nuestros clientes web se conectan a través de HTTP a este servidor web y solicitan la última foto (codificada en XML), la muestra y luego vuelve a aparecer, solicitando la nueva foto. El servidor web en este punto puede:

  • Devuelve la nueva foto, si hay una
  • Bloquee al cliente por algunos segundos (30 en nuestra configuración) esperando que ocurra algún evento y cambie la fotografía. Si no se generó ningún evento en ese punto, devuelve la misma foto, solo para permitir que la conexión permanezca activa y no se agote el tiempo del cliente.

De esta forma, cuando los clientes sondean, obtiene una respuesta de 0 a 30 segundos como máximo. Si ya se generó un nuevo evento, lo obtiene de inmediato), de lo contrario, se bloquea hasta que se genere un nuevo evento.

Básicamente es un sondeo, pero es un sondeo algo inteligente para no sobrecalentar el servidor web. Si Comet no es tu respuesta, estoy seguro de que esto podría implementarse usando la misma idea, pero usando AJAX o codificando más extensamente en JSON para obtener mejores resultados. Esto fue diseñado antes de la era AJAX, por lo que hay mucho margen de mejora.

Si alguien puede proporcionar una implementación liviana real de esto, ¡genial!

Una alternativa interesante a Comet es usar sockets en Flash.

Otra forma más estándar es SSE (eventos enviados por el servidor, también conocido como EventSource , después del objeto JavaScript).

Comet fue creado por Alex Russell de Dojo Toolkit ( http://www.dojotoolkit.org ). Aquí hay un enlace a más información http://cometdproject.dojotoolkit.org/

Hay otros métodos. No estoy seguro de si son “mejores” en su situación. Podría tener un applet de Java que se conecte al servidor en la carga de la página y espere a que el servidor envíe cosas. Sería un poco más lento en la puesta en marcha, pero permitiría que el navegador reciba datos del servidor de forma infrecuente, sin votación.

Puede usar una aplicación Flash / Flex en el cliente con BlazeDS o LiveCycle en el lado del servidor. Los datos se pueden enviar al cliente utilizando una conexión RTMP. Tenga en cuenta que RTMP usa un puerto no estándar. Pero puede volver fácilmente al sondeo si el puerto está bloqueado.

Es posible lograr lo que se pretende mediante el uso de conexiones HTTP persistentes.

Vea el artículo de Comet en wikipedia, ese es un buen lugar para comenzar.

No estás proporcionando mucha información, pero si estás buscando construir algún tipo de sitio orientado a eventos (a’la digg spy) o algo así, probablemente estarás buscando implementar un IFRAME oculto que se conecte a una url en la que la conexión nunca se cierra y luego debe enviar las secuencias de comandos del servidor al cliente para realizar las actualizaciones.

Puede valer la pena visitar Meteor Server, que es un servidor web diseñado para COMET. Buena demostración y también es utilizada por twitterfall .

Una vez que se abre una conexión en el servidor, se puede mantener abierta y el servidor puede actualizar el contenido hace mucho tiempo que hice con el uso de multipart/x-mixed-replace pero esto no funcionó en IE.

Creo que puedes hacer cosas inteligentes con encuestas que hagan que funcione más como presionar al no enviar contenido sin cambios a los encabezados pero dejando la conexión abierta, pero nunca he hecho esto.

¡Podrías probar nuestro Comet Component , aunque es extremadamente experimental …!

Consulte esta biblioteca https://github.com/SignalR/SignalR para saber cómo enviar datos a los clientes dinámicamente a medida que estén disponibles

También puedes mirar los Pushlets de Java si estás utilizando páginas jsp.

Es posible que desee mirar ReverseHTTP también.