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