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?
Odpowiedz
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ź.
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
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.
- 1. W jaki sposób utworzyć urządzenie wirtualne io w systemie Linux, które przesyła dane do rzeczywistego urządzenia?
- 2. W jaki sposób webapp przesyła dalej do innej aplikacji internetowej?
- 3. dane ponad kanału audio
- 4. W jaki sposób serwer może przekazywać dane do klienta?
- 5. jqgrid - postData przesyła poprzednie żądania i dane.
- 6. jak zapisać dane do kanału gniazda
- 7. W jaki sposób Facebook osiąga nieskończone przewijanie?
- 8. Czy oszczędzanie środków przesyła dane przez Internet?
- 9. Facebook Co to jest plik kanału?
- 10. Przykład symbolu.WBAN. Bluetooth, który przesyła dane
- 11. W jaki sposób warunkowo przesyłasz dane do klienta w Meteor?
- 12. w jaki sposób codeititer dezynfekuje dane wejściowe?
- 13. W jaki sposób mashupy craigslist pobierają dane?
- 14. W jaki sposób SSL szyfruje dane z serwera do klienta?
- 15. W jaki sposób kopiujesz dowolne dane do schowka jako plik?
- 16. W jaki sposób można przekazać dane do klienta strony internetowej?
- 17. W jaki sposób dołączasz dane klienta do połączenia z serwerem?
- 18. Debug.WriteLine do innego "kanału"?
- 19. W jaki sposób odnawiasz wygasły token dostępu Facebook?
- 20. W jaki sposób Facebook uniemożliwia umieszczenie witryny w iFrame?
- 21. Oznacz kogoś w oknie dialogowym kanału z Facebook API
- 22. Jaki jest najlepszy sposób pisania aplikacji facebook w haskell?
- 23. Prefiltruj dane w oknie dialogowym Facebook Webbook
- 24. Błąd interfejsu API wykresu Facebook - Limit żądania działania kanału osiągnięty
- 25. Jak DWR przesyła dane przychodzące i wymyka się typowi danych
- 26. Serwer nodejs- socket.io przesyła te same dane wszystkim użytkownikom.
- 27. Wybieranie pola nazwy autora z kanału informacyjnego Atom przy użyciu LINQ (C#)
- 28. W jaki sposób dane są przechowywane w schowku Windows
- 29. Jak dodać urządzenie do mojego profilu informacyjnego?
- 30. W jaki sposób nadawanie z kanału Phoenix wpływa na klientów w innych węzłach?
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