Что выбрать для real-time обновление: Node.js, Comet или Ajax?
Здравствуйте, есть вопрос по выбору технологии.
Есть работающий сайт написанный на Yii, недавно возникла необходимость создать страницу с таблицей, в которую выводятся данные из БД MySQL.
Есть администратор проекта который вносит информацию в эту таблицу БД.
Необходимо реализовать push-уведомления, и добавление новых данных в отображаемую таблицу для всех пользователей просматривающих эту страницу. Необходимо, чтобы это происходило как можно быстрее, в идеале если обновление будет происходить real-time.
На сервере в данный момент стоит только Apache, есть возможность поставить nginx, node.js.
Погуглив я пришел к нескольким вариантам, с помощью которых можно это воплотить.
Варианты которые приходили в голову (минусы которые выявились при беглом осмотре):
1. Первый самый лобовой - прикрутить ajax и каждую секунду отправлять запрос к БД. Минусы : количество запросов к базе, количество запросов к серверу 2. Тот же ajax, только данные из БД кешировать в html-файл (или memcache) с помощью cron, тем самым сократив количество запросов к бд Минусы : количество запросов к серверу 3. Использовать Comet сервер, для установки long polling соединения Минусы : Нагрузка на сервер при большем количестве соединений 4. Использовать phpDaemon Минусы : не успел изучить. 5. Использовать node.js Минусы : так как проект рабочий, написан на php, возможны проблемы с одновременной работой apache и node.js 6. Использовать nginx-push-stream-module для long polling соединения Минусы : не успел изучить.
Понятно, что если бы страницу одновременно просматривал бы только 1 человек то можно было бы использовать и самый примитивный способ, а что если количество одновременных уникальных посетителей будет 50 / 500 / 5000?
Хотелось бы услышать компетентное время какой из вариантов:
Самый оптимальный при нагрузке 100-200 уников?
Какой самый простой в обслуживании?
Какой самый устойчивый к нагрузкам (может выдержать больше 3000 одновременных подключений)?
Или может быть все это абсолютно глупые решения, и я смотрю не в ту сторону, буду рад любой информации, или хотя бы направлению в котором стоит копать.
Node.js, Comet или Ajax звучит как горячее, красное или тяжелое.
По вопросу советую использовать node.js + какой-нибудь socket.io, faye. Повесить пуш-сервер на отдельный порт, чтобы не проксировать его через апач. Эти библиотеки позволят эффективно решить вашу задачу.
phpDaemon реализует и long polling и websockets, которые вы почему-то не рассматриваете, хотя сокеты здесь наиболее очевидны. Если ваш проект уже написан на PHP, то выбор у вас наиболее вероятно будет стоять между различными решениями на PHP, из соображений удобства поддержки. Таких решений довольно много. Можете попробовать phpDaemon, если понравится, оставляйте его. Он довольно громоздкий по сравнению со многими аналогами, но зато он уже довольно стабилен в отличие от более легковесных и простых вариантов.