Какой стек технологий подходит для realtime приложения?
Нужно написать приложение со следующими условиями:
1. Нужно, чтобы пользователи в реалтайме могли подключаться к серверу и получать от него какую-то информацию в реальном времени. Пользователи подключаются с браузера, поэтому здесь, мне кажется, больше всего подходят WebSockets(но, возможно, есть вариант лучше). Причем мне как раз нужно, чтобы они могли подписываться на некоторую категорию и получать соответствующую информацию, которую им будут присылать на эту категорию, и могли менять эту категорию без особых проблем.
2. Когда пользователь подписывается на категорию, то, если ранее на эту категорию никто не подписывался, создается воркер(демон), который в итоге будет пушить сообщения всем пользователям, подписавшимся на его категорию. Когда все пользователи отписываются от этой категории, то демон должен умирать. Когда он нужен будет в следующий раз, его запустят.
3. Демон в свою очередь просто парсит некоторую инфу с сайта/базы и пушит эту инфу, подписавшимся на него клиентов(точнее, как я полагаю, он будет ее пушить серверному инструменту, который уже в соответствующую категорию будет рассылать это всем подписчикам). Но иногда у него может возникнуть необходимость попросить всех остальных работающих демонов приостановиться (не совсем остановиться, а просто перестать делать то, что они делают, пока этот демон не скажет, что можно продолжить), т.е. должна быть возможность какого-то общения между демонами.
Соответственно, мне нужны технологии для реализации этих задач.
До этого пробовал это реализовать с помощью PHP, RatchetPHP, ZMQ и WebSockets, но из-за сырости Ratchet и ZMQ пришлось от этого отказаться.
В принципе, демоны написаны на PHP , возможно, не самым эффективным образом, но со своей работой они справляются, т.к. там особо ничего сложного и нет. Так что, если эту часть можно было бы не трогать, то было бы не плохо, хотя переписать ее на чем - то другом, не вижу сложности.
В качестве наблюдения и взаимодействия демонов был написан самописный костыль на PHP + ZMQ. Мне подсказали, что логичнее использовать Supervisord для этого дела. Но есть ли возможность реализации с Supervisord именно функционала, чтобы один демон сказал другим "подождите немного, я тут кое-что сделаю, но не умирайте"? Возможно, есть еще лучше варианты?
В качестве клиента вижу только вебсокеты, но если есть варианты лучше, буду только рад узнать.
Ну и также нужен какой-то серверный инструмент, чтобы обрабатывать запросы клиентов, на подписку к определенной категории, который будет в итоге пушить им информацию, которые будут передавать сами демоны. Предполагаю, что с этим хорошо справится NodeJS, но точно не знаю, т.к. не работал с ним особо.
Проект пойдет в продакшен, но для начала нужно, чтобы просто работало и выдерживало нагрузку до 100 подписчиков, но имело возможность расширения до нескольких тысяч.
Еще желательно, чтобы у этих инструментов из коробки была возможность реализации поставленных задач, чтобы не тратить слишком много времени на изучение этих инструментов.
Посмотрите в Redis есть возможность создавать каналы и пересылать сообщения, т.е. организовать распределенную шину данных.
Отправка пользователям в RealTime лучше NodeJS
Я думаю, для ваших целей идеально подойдет Node.js с Express на бэкенде и Socket.io на бэкенде и на фронтенде как средство связи.
Можно еще использовать Electron для создания нативного приложения.