2011-07-12 18 views
11

Ciekawi mnie, w jaki sposób Facebook przesyła dane do przeglądarki, tak jak w kanale wiadomości. Nowe dane wyświetlają się u góry kanału bez ponownego ładowania strony lub kliknięcia przycisku. Czy Facebook osiąga to przez odpytywanie swojego serwera przez AJAX w określonych odstępach czasu, czy też w jakiś sposób przesyłają nowe dane z serwera do klienta bez sprowokowania?
Jeśli tak, jakiego języka lub interfejsu API używają do tego?W jaki sposób Facebook przesyła dane do kanału informacyjnego?

+2

Jeśli masz firebuga, spójrz na konsolę. To, co zobaczysz, to żądanie GET, prawdopodobnie poprzez żądanie AJAX, które po prostu kręci się w nieskończoność. Prawdziwym pytaniem byłoby, w jaki sposób utrzymują tę prośbę otwartą, ponieważ nie wydaje się, aby była ustawiona na timeout lub interwał. – grep

Odpowiedz

3

To tak naprawdę nazywa się "długim sondowaniem" lub 'comet'. Istnieją różne sposoby wykonywania server push, ale najczęstszym sposobem jest pozostawienie otwartego połączenia podczas odbierania danych (ma ono wady, ponieważ przeglądarka ma ograniczoną liczbę otwartych połączeń z hostem). Facebook miał open-source Tornado web servers, który może obsługiwać wiele otwartych połączeń (co może być problemem, masz wielu użytkowników, ale na przykład używasz Apache). W momencie otrzymania odpowiedzi AJAX po prostu wykonujesz nową prośbę, oczekując na kolejną odpowiedź.

2

Pchają go za pomocą AJAX i używają (przynajmniej WYKORZYSTUJĄ), nieskończonego przewijania.

Więc chcesz załadować swoją stronę, a oni dokonać wstępnego połączenia z serwerem, aby załadować kilka wiadomości na podstawie kto jest zalogowany, powiedzieć z ram jak JQuery:

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

A kiedy przewijasz w dół, zauważają, kiedy jesteś blisko dolnej części strony i muszą załadować więcej, aby nie pozostały bez danych, a następnie automatycznie wykonają kolejne połączenie. Nazywa się to nieskończone przewijanie i śledzi, gdzie jesteś w DOM:

Tylko jeden przykład: http://ajaxian.com/archives/implementing-infinite-scrolling-with-jquery

3

Zasadniczo kod robi wywołanie AJAX do swoich serwerów i albo czeka na odpowiedź, która wyzwala kolejny Żądanie, ankiety na zegarze lub otwierają websocket, aby otrzymywać dane natychmiast po ich naciśnięciu. To oczywiście dotyczy "nowych" danych wyświetlanych u góry kanału. Gdy strona zostanie osiągnięta na dole, wykonają kolejne wywołanie AJAX, aby uzyskać kolejne n pozycji.

Powiązane problemy