2011-07-12 21 views
11

Tengo curiosidad sobre cómo Facebook empuja los datos al navegador como en las noticias. Los nuevos datos se presenta en la parte superior del alimento sin necesidad de recargar la página o hacer clic en un botón de
¿Tiene Facebook lograr esto mediante el sondeo de su servidor a través de AJAX en un intervalo establecido o no de alguna manera impulso nuevos datos desde el servidor al cliente sin provocación?
En caso afirmativo, ¿qué idioma o API utilizan para hacer esto?¿Cómo aplica Facebook los datos a las noticias?

+2

Si tiene firebug eche un vistazo en la consola. Lo que verá será una solicitud GET, probablemente a través de una solicitud AJAX, que simplemente gira indefinidamente. La verdadera pregunta sería cómo mantienen abierta esta solicitud, ya que no parece estar establecida en un tiempo de espera o intervalo. – grep

Respuesta

3

Se llama en realidad 'de votación larga', o 'comet'. Hay diferentes formas de realizar server push, pero la forma más común es mantener la conexión abierta mientras recibe los datos (tiene inconvenientes ya que el navegador tiene un límite de número de conexiones abiertas a un host). Facebook tenía código abierto Tornado web servers, que puede manejar una gran cantidad de conexiones abiertas (que puede ser un problema si tiene muchos usuarios, pero está usando apache, por ejemplo). En el momento en que recibe la respuesta AJAX, simplemente realiza una nueva solicitud, esperando la siguiente respuesta.

2

empujan con AJAX, y utilizan (al menos solían usar), el desplazamiento infinito.

Quizás cargar la página, y que harían una llamada inicial al servidor para cargar algunos mensajes en función de quién está registrado en, por ejemplo, con un marco como jQuery:

http://api.jquery.com/jQuery.ajax/

Y a medida que te desplazas hacia abajo, anotan cuándo estás cerca de la parte inferior de la página y necesitan cargar más para que no te queden sin datos, y luego hacen otra llamada automáticamente. Esto se conoce como desplazamiento infinito, y realiza un seguimiento de dónde se encuentra en el DOM:

Sólo un ejemplo: http://ajaxian.com/archives/implementing-infinite-scrolling-with-jquery

3

En esencia, el código hace una llamada AJAX a sus servidores, y, o bien espera una respuesta que desencadena otra solicitar, encuestas en un temporizador, o abren un websocket para recibir datos tan pronto como se presiona. Esto, por supuesto, es para que los datos "nuevos" aparezcan en la parte superior del feed. Cuando se llega a la página en la parte inferior, simplemente hacen otra llamada AJAX para obtener los siguientes n elementos.

Cuestiones relacionadas