Установка состояния приложения типа gen_server - PullRequest
1 голос
/ 19 марта 2012

Я пытаюсь выяснить, возможно ли запустить gen_server с заданным состоянием.

Я хотел бы иметь возможность настроить монитор / супервизор, который перезапускает сервер с его последним действительным состояниемкогда сервер падаетжелаемое состояние при вызове, но я бы хотел избежать изменения серверного модуля и по возможности обрабатывать его исключительно из процесса моего монитора / супервизора.

Спасибо за ваше время.

1 Ответ

2 голосов
/ 19 марта 2012

gen_server: init принимает аргумент Args.Вы можете передать любое желаемое состояние и установить его как состояние сервера.Вы можете передать Args на start_link, и он передаст его init для вас.

http://www.erlang.org/doc/man/gen_server.html#Module:init-1

http://www.erlang.org/doc/man/gen_server.html#start_link-3

Я думаю, что в вашем случае вы можете захотетьхранить государство в мнезии.Таким образом, вам не нужно заботиться о передаче последнего действительного состояния gen_server.Если вы не хотите начинать mnesia, вы можете использовать ETS.Создайте общедоступный ETS в каком-то процессе, который не умрет, и используйте его на своем сервере gen_server (обратите внимание, что когда сервер, создавший ets, умирает, ets уничтожается)

http://www.erlang.org/doc/man/ets.html

http://www.erlang.org/doc/man/mnesia.html

...