2012-03-19 3 views
1

주어진 상태로 gen_server를 시작할 수 있는지 여부를 찾으려고합니다.gen_server 유형 응용 프로그램의 상태 설정

이 서버가 충돌했을 때 마지막 유효 상태로 서버를 다시 시작하는 모니터/수퍼바이저를 설정하고 싶습니다.

이 문제를 해결하는 방법에 대한 제안은 매우 환영 할 것입니다.

지금까지 생각한 유일한 아이디어는 서버 상태를 호출 할 때 원하는 상태로 변경하는 특별한 handle_call/3을 사용하는 것입니다.하지만 서버 모듈을 수정하지 않도록하고 모니터/감독자 프로세스에서이 작업을 처리하는 것이 좋습니다. if 가능한.

감사합니다.

답변

2

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

나는 당신의 경우에 당신이 mnesia의 상태를 저장 할 수 있습니다 생각합니다. 그렇게하면 마지막 유효한 상태를 gen_server에 전달할 필요가 없습니다. 건망증을 시작하고 싶지 않은 경우 ETS를 사용할 수 있습니다. 죽을하고 gen_server에서 사용하지 몇 가지 과정에서 공공 ETS 만들기

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

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

+0

내가 당신의 아이디어 a를 좋아하는 (ETS를 만들어 서버가 죽었을 때 ETS는 파괴주의) 제비. 도와 줘서 고마워. –