Комментарии 4
:ets
приклеена к ноде, я не хочу преждевременно оптимизировать то, что в оптимизации не нуждается, заплатив за это кучей костылей по поддержке кластера.
Количество каналов тут ни при чем, все зависит от количества матчеров в конечном итоге (если сообщения пришли через несколько каналов, они склеиваются). Роутинг весь на :pg
, поэтому там негде заткнуться, кроме как в броадкастере, который все равно будет один. Миллион ивентов, 1000 каналов, 1000 матчеров оно прожевало меньше, чем за секунду на моём лаптопе.
Первые две строки — регистрация обработчика и подписка. Следующая — отсылка сообщения. Заключительный блок — проверка, что сообщение получено. Эти три куска обычно будут находиться в разных местах кода, никак не связанных между собой.
Стоило бы разбить его на три отдельных блока в форматировании статьи, а не сливать в один. Вот так:
{:ok, pid} = match({:tag_answer, _}, self())
subscribe(:chan, pid)
event(:chan, {:tag_answer, 42})
receive do
{:event, :chan, {:tag_answer, 42}} -> :ok
after
1_000 -> :error
end
Брокер сообщений своими руками