Здравствуйте. Мне нужно каким-то образом в режиме реального времени мониторить информацию, которая добавляется в базу данных. AJAX не вариант, т.к. запросов будет много, а каждые n секунд опрашивать, мне кажется, не оптимально, учитывая, что если будет большая посещаемость, для каждого будет свой запрос.
Мне же нужно, чтобы был один запрос для всех и в реальном времени.
Пришел к выводу, что нужно прибегнуть к node.js, но тут встает другая задача - сам сайт написан на php. Можно-ли эти две вышеперечисленные вещи как-то совместить? Использую фреймворк CodeIgniter 3.
С node.js никогда не работал, поэтому не знаю, что из этого выйдет.
Или есть другие варианты? Буду очень благодарен за помощь)
Я был в похожей ситуации, поставил сокет сервер и отдельно сайт на php. Получилось так, что сокет-сервер нагружал систему очень сильно (там были проблемы c DDOS).
В итоге решил, т.к. данные для всех одинаковые, просто ставил скрипт по cron все записывал в json файл, а дальше обычным ajax его забирал раз в секунду, файл отдавался nginx, т.е. не нужно было подниматься всякие бекенд-процессы, в результате нагрузка значительно упала.
А с node - будет проблема (если вы до этого с ней не работали) расширить так, чтобы работало на всех ядрах (или на половине) и чтобы сокеты корректно отправляли информацию, нужно будет использовать какой-нибудь брокер сообщений.
Не используйте node в данной ситуации, я бы вам это посоветовал.
DuD: ajax не будет нагружать сильно? Просто я думал, что раз будет большое кол-во народа, то на фоне раз в три секунды получать последние строки из базы будет сильно нагружать.
Mihairu: ну скажем так, это будет конечно не идеально, но работать будет даже без кеша в редисе. Просто по тому что у вас это все упадет в кеш БД. Но проще всего сделать кеш в редисе и долбить его хоть 100500 раз в секунду.
Mihairu: все от задачи зависит. Если надо отрабатывать движение в реальном времени (например игру), то тут аякс не пойдёт. Но тут в целом PHP не пойдёт.
Если же у вас какой-то банальный нотификатор, то не вижу проблем с ajax.
Иван: да понятное дело, что для движения не пойдет) Мне главное определенный промежуток времени обновлять на глазах у пользователя таблицу. Вот тут я просто опасаюсь за нагрузку. Не будет ли она слишком большой, если будет много пользователей, или будет открыто много вкладок?
Могу сделать веб-сокет сервер, с http API.
Т.о. веб-клиенты будут цепляться по вебсокету к серверу, а ваша какая-то часть будет использовать API чтобы пославть какие-то сообщения клиентам, адресно или броадкастом.
Риал тайм уведомления с node.js + php
1) Комет сервер на ноде (для простоты можно заюзать socket.io)
2) При обновлении данных стучать в комет сервер из php скрипта (лучше асинхронно, можно заюзать очереди типа beanstalk). Это не мониторинг БД, но если у Вас как-то упорядоченно обновляются данные в БД, то вряд ли это станет проблемой.
3) При стуке в comet из PHP слать уведомления клиентам