Por supuesto, conozco a Ajax, pero el problema con Ajax es que el navegador debe sondear el servidor con frecuencia para encontrar si hay nuevos datos. Esto aumenta la carga del servidor.
¿Existe algún método mejor (incluso usando Ajax) que no sea sondear el servidor con frecuencia?
Respuestas:
Sí, lo que está buscando es COMET http://en.wikipedia.org/wiki/Comet_(programming) . Otros buenos términos de Google para buscar son AJAX-push y reverse-ajax.
fuente
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 para enviar datos en tiempo real a un navegador web. Recomiendo StreamHub Push Server , tienen algunas demostraciones geniales y es mucho más fácil comenzar que cualquiera de los otros servidores. Consulte el Tutorial de introducción a Comet y StreamHub para obtener una introducción rápida. Puede usar Community Edition, que está disponible para descargar de forma gratuita pero está limitado a 20 usuarios simultáneos. La versión comercial bien 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 montón de tutoriales en la red y también hay un adaptador GWT Comet .
fuente
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 cliente-servidor basada en mensajes.
Puede iniciar fácilmente la conexión desde javascript:
El manejo del lado del servidor depende de su pila de tecnología.
fuente
Investigue Comet (una parodia del hecho de que Ajax es un agente de limpieza y también lo es Comet) que básicamente es "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_(programming)
fuente
Comet es definitivamente lo que quieres. Dependiendo de sus requisitos de idioma / marco, hay diferentes bibliotecas de servidores disponibles. Por ejemplo, WebSync es un servidor cometa integrado con IIS para desarrolladores ASP.NET/C#/IIS , y también hay muchos otros servidores independientes si necesita una integración más estrecha con otros idiomas.
fuente
Sugeriría 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 del centro de llamadas" de una aplicación web que implicaba actualizar el estado del agente y la cola de llamadas para un Callcenter en vivo, desarrollamos una solución interna que funciona, pero que está muy lejos de una biblioteca que pueda 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 muestran y luego vuelven a pedir la nueva foto. El servidor web en este punto puede:
De esta manera, cuando los clientes sondean, obtiene una respuesta en un máximo de 0 a 30 segundos. Si ya se generó un nuevo evento, lo obtiene de inmediato), de lo contrario, se bloquea hasta que se genere un nuevo evento.
Es básicamente un sondeo, pero es un sondeo algo inteligente para no sobrecalentar el servidor web. Si Comet no es su respuesta, estoy seguro de que esto podría implementarse utilizando la misma idea pero utilizando más extensamente AJAX o codificación 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 ligera real de esto, ¡genial!
fuente
Una alternativa interesante a Comet es usar sockets en Flash.
fuente
Otra forma estándar es SSE (Eventos enviados por el servidor, también conocidos como EventSource , después del objeto JavaScript).
fuente
El cometa fue acuñado por Alex Russell de Dojo Toolkit ( http://www.dojotoolkit.org ). Aquí hay un enlace a más información http://cometdproject.dojotoolkit.org/
fuente
Hay otros métodos No estoy seguro si son "mejores" en su situación. Podría tener un applet de Java que se conecta al servidor al cargar la página y espera a que el servidor envíe cosas. Sería un poco más lento en el inicio, pero permitiría que el navegador reciba datos del servidor de forma poco frecuente, sin sondeo.
fuente
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 mediante una conexión RTMP. Tenga en cuenta que RTMP utiliza un puerto no estándar. Pero puede recurrir fácilmente al sondeo si el puerto está bloqueado.
fuente
Es posible lograr lo que apunta a través del uso de conexiones http persistentes.
Mira el artículo de Comet en wikipedia, es un buen lugar para comenzar.
No está proporcionando mucha información, pero si está buscando construir algún tipo de sitio impulsado por eventos (a'la digg spy) o algo por el estilo, probablemente esté buscando implementar un IFRAME oculto que se conecte a una url donde la conexión nunca se cierra y luego empujará etiquetas de script del servidor al cliente para realizar las actualizaciones.
fuente
Puede valer la pena visitar Meteor Server, que es un servidor web diseñado para COMET. Bonita demostración y también es utilizada por twitterfall .
fuente
Una vez que se abre una conexión con el servidor, se puede mantener abierta y el servidor puede enviar contenido hace mucho tiempo,
multipart/x-mixed-replace
pero no funcionó en IE.Creo que puede hacer cosas inteligentes con el sondeo que hace que funcione más como empujar, no enviando encabezados sin cambios del contenido, pero dejando la conexión abierta, pero nunca he hecho esto.
fuente
Podrías probar nuestro Componente Cometa , ¡aunque es extremadamente experimental ...!
fuente
consulte esta biblioteca https://github.com/SignalR/SignalR para saber cómo enviar datos dinámicamente a los clientes a medida que estén disponibles
fuente
También puede buscar Java Pushlets si está utilizando páginas jsp.
fuente
Es posible que desee ver ReverseHTTP también.
fuente