Обрабатывать "события" асинхронно с эликсиром и фениксом

Я использую контроллеры Phoenix для получения данных через вызовы REST. Таким образом, приложение для iOS может отправлять "события" для каждого пользователя, и в зависимости от события мне нужно рассчитать балл / баллы и отправить его обратно пользователю. Расчет и отправка обратно пользователю могут происходить асинхронно. Я использую Firebase, чтобы общаться с пользователем.

Что такое хороший шаблон для расчета? Рассчитать может быть несколько запросов к базе данных, чтобы определить оценку этого события. Где этот расчет должен произойти? Фоновые рабочие, GenEvent, потоки внутри конкретного пользователя GenServer (я контролировал GenServer для каждого пользователя).

1 ответ

Решение

Я бы посмотрел каналы Феникса, задачи и GenServer.

Кроме того, если вы хотите управлять пулом работников GenServer для выполнения расчетов и, возможно, отослать вам результаты, обратитесь в Conqueuer. Я написал эту библиотеку, и она используется в производственных системах для моей компании. Он использует poolboy, который, вероятно, является самой распространенной библиотекой управления пулами в Erlang/Elixir.

Правда, я не до конца понимаю требования вашей системы, но мне это не кажется GenEvent имеет место в ваших требованиях. GenEvent о распространении событий одному или нескольким потребителям событий. Поэтому, если у вас нет графика процессов, которым нужно подписываться на события, генерируемые другими частями вашей системы, я не вижу в этом никакой роли.

Другие вопросы по тегам