Как Facebook подталкивает данные к ленте новостей? - PullRequest
11 голосов
/ 12 июля 2011

Мне интересно, как Facebook передает данные в браузер, как в новостной ленте.Новые данные отображаются в верхней части канала без перезагрузки страницы или нажатия кнопкиДостигает ли это Facebook, опрашивая свой сервер через AJAX с заданным интервалом, или они каким-то образом отправляют новые данные с сервера на неспровоцированный клиент?Если да, то какой язык или API они используют для этого?

Ответы [ 3 ]

4 голосов
/ 13 июля 2011

На самом деле это называется «длинный опрос», или «комета» . Существуют различные способы выполнения push-уведомлений на сервере , но наиболее распространенный способ - сохранять соединение открытым, пока он получает данные (у него есть недостатки, так как браузер имеет ограничение количества открытых соединений с хостом). Facebook с открытым исходным кодом веб-серверы Tornado , которые могут обрабатывать много открытых соединений (что может быть проблемой, если у вас много пользователей, но вы используете Apache, например). В момент получения ответа AJAX вы просто выполняете новый запрос, ожидая следующего ответа.

3 голосов
/ 12 июля 2011

По сути, код выполняет AJAX-вызов на свои серверы и либо ждет ответа, который инициирует другой запрос, опрашивает таймер, либо открывает веб-сокет для получения данных, как только они передаются. Это, конечно, для «новых» данных, отображаемых в верхней части канала. Когда страница достигается внизу, они просто делают еще один AJAX-вызов, чтобы получить следующие n элементов.

2 голосов
/ 12 июля 2011

Они проталкивают его с помощью AJAX и используют (по крайней мере, они ИСПОЛЬЗУЛИ для использования) бесконечную прокрутку.

Таким образом, вы загрузите свою страницу, и они сделают начальный вызов на сервер, чтобы загрузить некоторые сообщения в зависимости от того, кто вошел в систему, скажем, с помощью инфраструктуры, такой как JQuery:

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

И затем, когда вы прокручиваете страницу вниз, они отмечают, когда вы находитесь ближе к нижней части страницы, и им нужно загружать больше, чтобы вы не остались без данных, а затем они автоматически совершают другой вызов. Это называется бесконечной прокруткой и отслеживает, где вы находитесь в DOM:

Только один пример: http://ajaxian.com/archives/implementing-infinite-scrolling-with-jquery

...