Задать вопрос

Что выбрать для 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 одновременных подключений)?

Или может быть все это абсолютно глупые решения, и я смотрю не в ту сторону, буду рад любой информации, или хотя бы направлению в котором стоит копать.
  • Вопрос задан
  • 7126 просмотров
Подписаться 6 Оценить Комментировать
Решения вопроса 2
dizballanze
@dizballanze
Software developer at Yandex
Node.js, Comet или Ajax звучит как горячее, красное или тяжелое.
По вопросу советую использовать node.js + какой-нибудь socket.io, faye. Повесить пуш-сервер на отдельный порт, чтобы не проксировать его через апач. Эти библиотеки позволят эффективно решить вашу задачу.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
у вас первый вариант всегда самый нагруженный, и далее вниз идут на снижение нагрузки.

Апач с node.js никак не будет конфликтовать. phpDemon (я бы рекомендовал reactphp) тоже нормально живут.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Rhaps107
> 4. Использовать phpDaemon

phpDaemon реализует и long polling и websockets, которые вы почему-то не рассматриваете, хотя сокеты здесь наиболее очевидны. Если ваш проект уже написан на PHP, то выбор у вас наиболее вероятно будет стоять между различными решениями на PHP, из соображений удобства поддержки. Таких решений довольно много. Можете попробовать phpDaemon, если понравится, оставляйте его. Он довольно громоздкий по сравнению со многими аналогами, но зато он уже довольно стабилен в отличие от более легковесных и простых вариантов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект