Опрос данных с сервера - самый эффективный и практичный способ / настройка - PullRequest
2 голосов
/ 28 июня 2011

Я читал здесь несколько постов, касающихся опроса, и даже взглянул на Толкатель , хотя я не хочу идти по этому пути и нуждаюсь в некотором совете в отношении создания эффективного уведомления.система.Как это делают Facebook, Twitter и другие сайты?они используют веб-сокеты?

Ответы [ 2 ]

13 голосов
/ 29 июня 2011

Опрос

> Polling data from server - most
> efficient and practical way/setup

Вам следует избегать опроса, потому что он неэффективен и вообще не работает в режиме реального времени. Допустим, вы проводите опрос каждые 30 секунд, и ваш сервер может справиться с нагрузкой без проблем. Проблема в том, что ваши данные не в режиме реального времени. Вы можете сократить интервал опроса (каждую секунду), но тогда вам будет очень трудно пытаться масштабировать ваш сервер.

Но иногда опрос (умный) тоже очень приятен, потому что его легко реализовать. Вот несколько советов для вас:

  • Не используйте базу данных, но извлекайте данные из базы данных в памяти, например redis , memcached , поскольку они работают намного быстрее. Это секретный компонент для большинства популярных крупных игроков (веб-сайтов), чтобы они работали без сбоев. У Facebook есть серверы специального назначения, которые используют много памяти , используя memcached (5 ТБ в 2008 году => Facebook сильно вырос с тех пор;)).

    Если вы не можете установить (вероятно, следует!) Memcached или Redis на свой сервер, вы можете использовать размещенный http://redistogo.com, который бесплатен для небольших сайтов.

  • Другое, что нужно сделать, это увеличить интервал опроса, используя библиотеку github , чтобы предотвратить перегрузку сервера.


> How do facebook, twitter and other
> websites do this? are they using web sockets?

Веб-сокеты

Некоторые из этих сайтов используют веб-сокеты, но это только один из многих поддерживаемых транспортов, поскольку веб-сокеты доступны не во всех браузерах. В будущем, когда все браузеры будут поддерживать веб-сокеты, это будет единственный используемый транспорт (вероятно). Ниже я приведу список всех популярных транспортов с кратким описанием:

WebSocket - это технология, обеспечивающая для двунаправленного, дуплексного каналы связи, по одному Протокол управления передачей (TCP) разъем. Он предназначен для реализовано в веб-браузерах и сети серверы, но он может быть использован любым клиентское или серверное приложение.

Для клиентской стороны WebSocket должен был быть реализован в Firefox 4, Google Chrome 4, Opera 11 и Safari 5, а также а также мобильная версия Safari в iOS 4.2. Однако, хотя настоящее время поддержка отключена по умолчанию в Firefox и Opera, потому что забот о безопасности уязвимости.

По большей части, XMLHttpRequest long опрос работает как любое стандартное использование XHR. Браузер делает асинхронный запрос сервера, который может ждать чтобы данные были доступны раньше отвечает.

Этот транспорт доступен в любом браузере.

Длинный опрос Комета может быть созданный динамически создаваемый скрипт элементы, и установив их источник расположение сервера Comet, который затем отправляет обратно JavaScript (или JSONP) с некоторым событием в качестве полезной нагрузки. Каждый раз, когда запрос скрипта завершено, браузер открывает новый один, как и в длинном опросе XHR дело. Этот метод имеет преимущество будучи кросс-браузерным, пока еще разрешение междоменных реализаций.

предоставляет полезный потоковый транспорт в Internet Explorer

XMLSocket - это класс в ActionScript что позволяет контенту Adobe Flash использовать сокетную связь через TCP потоковые розетки. Может использоваться для простой текст, хотя, как имя подразумевает, что это было сделано для XML. это часто используется в приложениях чата и многопользовательские игры.

Facebook

Как вы, вероятно, знаете, Facebook действительно использует PHP для активной разработки, но на самом деле не использует его для каких-либо элементов реального времени на этом сайте, потому что PHP не предназначен для правильной обработки (пока?). Многие люди злятся на меня за это, но я не могу не сказать, что это правда (даже Facebook согласен). В PHP почти все вызовы функций (C) используют блокировку ввода-вывода, что делает практически невозможным масштабирование систем реального времени. Я прочитал пост здесь, используя неблокирующий ввод-вывод с PHP (качество?). В прошлом Facebook создавал чат, используя Erlang , который также довольно популярен для неблокирующих операций ввода-вывода. Я сам нахожу код Erlang странным, но все же хотел бы его изучить. Вот несколько ссылок о Facebook с использованием Erlang:

Также Facebook купил Friendfeed в прошлом и с открытым исходным кодом там Tornado framework, который написан на Python для выполнения неблокирующего ввода / вывода.

Это уже не просто традиционный Стек Linux, Apache, MySQL и PHP которые делают сайт, как Facebook или FriendFeed возможно, но новый инструменты инфраструктуры, такие как Торнадо, Кассандра, Улей (построен на вершине Hadoop), memcache, Scribe, Thrift и другие необходимы. Мы верим в выпуск в целом полезного компоненты инфраструктуры как открытые источник (см. Facebook Open Source) как способ увеличения инноваций через Web.

Я предполагаю, что они также используют торнадо для некоторых частей этой системы.


Другие сайты

Ниже я попытаюсь перечислить некоторые популярные фреймворки (с открытым исходным кодом) для выполнения неблокирующего ввода-вывода:

  • Socket.io (Node.js): Socket.io становится довольно популярной неблокирующей средой для node.js (1722 человека смотрят этот проект на Github прямо сейчас). Мне очень нравится Socket.io
  • Netty (Java). Проект Netty - это попытка предоставить среду и инструменты асинхронных сетевых событий, управляемых событиями, для быстрой разработки поддерживаемых серверов и клиентов с высокопроизводительными и масштабируемыми протоколами.
  • tornado (Python): Tornado - это версия масштабируемого, неблокирующего веб-сервера и инструментов с открытым исходным кодом, поддерживающих FriendFeed.

> even had a look at Pusher although I
> don't want to go down that route

Я не понимаю вашу неприязнь к пушеру, потому что это довольно популярное хостинговое решение. С помощью этого размещенного решения вы можете начать создавать масштабируемые услуги в режиме реального времени без каких-либо хлопот с довольно хорошими ценами (бесплатными, если они небольшие и довольно доступные для веб-сайтов среднего уровня).

0 голосов
/ 02 августа 2012

Я изучал веб-сокеты и узнал о «Kaazing WebSocket Gateway». Kaazing WebSocket Gateway обеспечивает полную эмуляцию WebSocket для всех старых браузеров (т. Е. 5.5+, Firefox 1.5+, Safari 3.0+ и Opera 9.5+), поэтому вы можете начать использовать API-интерфейсы HTML5 WebSocket уже сегодня.

Пожалуйста, смотрите эту ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...