2009-10-16 17 views
7

He escrito una pequeña aplicación web que es básicamente un cliente de chat con JQuery en el navegador, para obtener las publicaciones estoy sondeando el servidor con una solicitud de AJAX y agregando nuevas respuestas, Me preocupa hacer esto lo más eficiente posible sin perder la sensación en tiempo real.eficiencia del ancho de banda de encuestas de chat de Ajax

http://darklightweb.co.uk/RealTime/

no puedo ver ninguna manera que son posibles interrupciones, así que estoy de votación una página cada 5 segundos que no devuelve nada si no hay nuevos mensajes están disponibles para mantener la transferencia de datos hacia abajo si está inactivo, si tiene un mensaje que envía el mensaje superior en la cola y estoy comprobando nuevamente tan pronto como la solicitud Ajax haya terminado hasta que la cola de mensajes esté vacía.

¿Alguna otra sugerencia sobre cómo hacer esto con el menor ancho de banda posible o posibles implementaciones alternativas?

Respuesta

11

sondeo podría no ser la mejor solución para la implementación de una charla - Te sugiero echar un vistazo a JQuery's implementation de COMET que mantiene una conexión abierta con el cliente y empuja actualizaciones desde el servidor de 'abajo' y es también quite scalable.

+0

Maravilloso, muchas gracias. – Baxter

+4

¿Alguien sabe si Stack Overflow utiliza encuestas para buscar actualizaciones como "se agregaron 2 nuevas respuestas, haga clic aquí para mostrarlas" mientras escribe su propia respuesta? ¿O usa algún tipo de sistema de "empuje" como cometa? –

4

Creo que para una aplicación de chat puede utilizar

Reverse Ajax

Reverse Ajax se refiere a un diseño patrón de Ajax que utiliza HTTP durante más tiempo conexiones para permitir a baja latencia comunicación entre una servidor web y un navegador. Básicamente es una forma de enviar datos del cliente al servidor y un mecanismo para empujar los datos del servidor de vuelta al navegador. 1

Esta comunicación servidor-cliente toma una de dos formas:

* Client polling, the client repetitively queries (polls) the 

servidor y espera una respuesta. * Servidor push, se mantiene una conexión entre un servidor y el cliente abierto, el servidor envía datos cuando disponible.

Reverse Ajax describe la implementación de cualquiera de estos modelos , o una combinación de ambos. El patrón de diseño también se conoce como Ajax Push, Full Duplex Ajax y Streaming Ajax.

y

moo-comet

Request.Comet es una clase javascript simple de crear cruz navegador Comet (Reverse Ajax) aplicaciones fácilmente. Proporciona transferencias de datos en tiempo real entre el cliente y el servidor y se puede usar con cualquier lenguaje de servidor.

+0

también hay un (cometa) aplicación AJAX inversa para jQuery, por lo que usar moo-cometa podría no ser tan conveniente como Baxter está usando jQuery todos modos (ver mi respuesta para los enlaces) – msparer

+0

Gracias, gran respuesta, pero yo preferiría atenerse a un marco JS. – Baxter

1

He escrito casi EXACTAMENTE la misma aplicación para facilitar la comunicación entre amigos en el trabajo cuando varios empleadores usan el filtrado web draconiano.

Descubrí que la cantidad de datos transferidos para estas solicitudes de sondeo es mínima y raramente se aproxima a 1kb/s por usuario conectado, generalmente mucho menos ya que solo está sondeando 5 veces.

¿El ancho de banda es realmente un problema o está optimizando prematuramente?

+0

"¿estás optimizando prematuramente?" Maldito reventado. – Baxter

1

Si decide no ir con el enfoque COMET, entonces yo haría lo mismo que tú, excepto si la cola contiene varios mensajes y luego se envían todos a la vez. De esta forma solo sondeas exactamente cada 5 segundos y nada más (ni menos). Por supuesto, con 100 personas conectadas esto sigue generando 20 solicitudes por segundo, por lo que debe intentar optimizar el lado del servidor de tal forma que cada solicitud requiera tan pocos recursos de servidor (CPU/RAM/tiempo) como sea posible. El almacenamiento en caché es tu amigo aquí.

Sin embargo, no me preocuparía el ancho de banda porque los mensajes de chat suelen ser muy cortos y sus solicitudes serían mínimas de todos modos.

Cuestiones relacionadas