gen_fsm является аккуратной реализацией конечного автомата, вы тростниковый сделать примерно то же самое, что вы делаете с gen_server, а кроме того легко управлять различными состояниями ваше приложение (например, в игровом сервере выберите уровень, таблицу, измените атрибут игрока, воспроизведите, сохраните, восстановите ...).
gen-event - это простой способ для отправки события, ваше приложение отправляет все события gen_event, ничего не зная о потенциальном использовании, и вы динамически добавляете и удаляете обработчики с различным поведением (файл входа в базу данных, отображение информация в графическом интерфейсе ...). Я использовал это, чтобы иметь графическое представление состояния процессов и связи моего приложения и журнала файлов для анализа производительности.
Спасибо. Почему команда lager решила использовать gen_event вместо gen_server? –
From Manual, так как каждый обработчик событий является одним модулем обратного вызова, диспетчер событий будет иметь несколько модулей обратного вызова, которые будут добавлены и удалены динамически. Поэтому gen_event более терпим к ошибкам модуля обратного вызова, чем к другим видам поведения. Если функция обратного вызова для установленного обработчика событий не работает с Reason или возвращает значение с плохим значением, менеджер событий не будет терпеть неудачу. Он удалит обработчик события, вызвав функцию обратного вызова Module: terminate/2 (см. Ниже), в качестве аргумента {error, {'EXIT', Reason}} или {error, Term}, соответственно. Никакой другой обработчик событий не будет затронут. – Marutha