[erlang-questions] erlang-questions Digest, Vol 11, Issue 52
Vlad Dumitrescu
vladdu55@REDACTED
Thu Apr 17 16:03:50 CEST 2008
Hi,
2008/4/17 wenew zhang <wenewboy@REDACTED>:
> >>Wher you can specify in ServerName which node the server should be
> started.
> gen_server:start/start_link(ServerName,..) only have two options:
> {local,Name}| {global,GlobalName},
>
> in my project,
> i want communicate between two process cross nodes without use global
> option,
> if can't do that,i think i must use a global mid- transfer the message
> like this:pid1---->global Server->pid2
> Pid2---->global server ->Pid1
> but i think pid1->Pid2 more faster than above!
You need *some* kind of global server in any case, so that you can
tell process #1 about pid2 and process #2 about pid1. The good news is
that rpc:call uses the global 'rex' process and works nicely for this
purpose.
So you have process#1 on node#1 with pid1 and process#2 on node#2 with pid2.
Write and load on node#1 a module with a function like
set_pid(Pid) ->
Pid1 = get_process1_pid(), %% implement this to get the right value
Pid1 ! {peer, Pid},
Pid1.
>From node#2 call from process#2
Pid1 = rpc:call('node#1', mymodule, set_pid, [Pid2]).
Process#1 should wait for a {peer, Pid} message before attempting to
talk to process#2.
This way, the processes get the other process' pid and can use it
directly. The method can be extended to several peers.
I hope this helps.
best regards,
Vlad
More information about the erlang-questions
mailing list