나는 리소스가 너무 적어 한 노드에 머물고있는 얼랑 애플리케이션을 가지고있다. 저는 gen_servers를 한 프로세스에서 다른 프로세스로 이동시키는 과정에 있습니다. 비교적 쉽게 진행됩니다. 나는 마지막 장벽에 서있다. 이러한 gen_servers를 생성하는 팩토리 프로세스를 가져 와서 로컬 노드 대신 원격 노드에 생성한다. start_link의 기본 동작은 로컬에서만 시작하는 것이 분명하지만이를 변경하는 옵션이 없습니다.Erlang gen_server는 다른 노드에서 gen_server를 어떻게 시작합니까?
나는 솔루션으로 독창성을 발휘해야하며, 이미 성공한 사람이 이미 이와 같은 것을 구현했는지 알고 싶었습니다. IOW, 추천 솔루션은 무엇입니까?
편집
나는 호출에 의해 트리거되는 통화의 사슬에서 찾고 있어요 :
gen_server:start_link(?Module, Args, [])
gen_server를 :/3 START_LINK :
start_link(Mod, Args, Options) ->
gen:start(?MODULE, link, Mod, Args, Options).
세대가 : 시작/5 :
start(GenMod, LinkP, Mod, Args, Options) ->
do_spawn(GenMod, LinkP, Mod, Args, Options).
세대는 : do_spawn/5 :
do_spawn(GenMod, link, Mod, Args, Options) ->
Time = timeout(Options),
proc_lib:start_link(?MODULE, init_it,
[GenMod, self(), self(), Mod, Args, Options],
Time,
spawn_opts(Options));
proc_lib는 :/5 START_LINK : 마지막으로 흥미로운 비트 우리를 얻을 수
start_link(M,F,A,Timeout,SpawnOpts) when is_atom(M), is_atom(F), is_list(A) ->
Pid = ?MODULE:spawn_opt(M, F, A, ensure_link(SpawnOpts)),
sync_wait(Pid, Timeout).
합니다.는 일치하는 spawn_opt/4가된다
spawn_opt(Node, M, F, A, Opts) when is_atom(M), is_atom(F), is_list(A) ->
...
...
그것은이 노출되지 않도록 내 마음을 놀라게한다 : 실제로 나에게 유용 할 것 중 하나가
spawn_opt(M, F, A, Opts) when is_atom(M), is_atom(F), is_list(A) ->
...
...
하지만가. 부주의 한 프로그래머가 gen_server를 시도 할 위험이 있다는 것을 알았습니다 : 화성에서 실행되는 erlang 노드의 프로세스를 start_link하면서 30 분 동안 통화를 차단하지만 프로그래머의 경계가 확실합니다. OTP 수정이나 임시 방편을 쓰는 데 정말로 어려움이 있습니까?