- person¥×¥í¥»¥¹(Name¤ÈAge¤òÊÝ»ý)¤È¤ä¤ê¤È¤ê¤¹¤ë¡£
- ¼ç¥×¥í¥»¥¹¢«(rpc)¢ªperson
Pperson = spawn(?MODULE, person, [{"Taro", 25}]),
{name, Name} = rpc(Pid, name),
io:format("name: ~p~n",[Name]),
{age, Age} = rpc(Pid, age),
io:format("age: ~p~n",[Age]).
rpc(Pid, Msg) ->
Pid ! {self(), Msg},
receive
{Pid, Ans} -> Ans
after 1000 -> void
end.
person({Name, Age}) ->
receive
{From, name} ->
io:format("person: got msg name~n",[]),
From ! {self(), {name, Name}},
person({Name, Age});
{From, age} ->
io:format("person: got msg age~n",[]),
From ! {self(), {age, Age}},
person({Name, Age})
end.
- ¼ç¥×¥í¥»¥¹¤Ïworker¥×¥í¥»¥¹¤È¤ä¤ê¤È¤ê¤¹¤ë¡£
worker¤Ïperson¤È¤ä¤ê¤È¤ê¤¹¤ë¡£- ¼ç¥×¥í¥»¥¹¢«(rpc1)¢ªworker¢«(rpc2)¢ªperson
start2() ->
Pperson = spawn(?MODULE, worker, [{"Jiro", 22}]),
{name, Name} = rpc(Pid, name),
io:format("name: ~p~n",[Name]),
{age, Age} = rpc(Pid, age),
io:format("age: ~p~n",[Age]).
worker({Name, Age}) ->
Pperson = spawn(?MODULE, person, [{Name, Age}]),
worker2(Pperson).
worker2(Pperson) ->
receive
{From, name} ->
io:format("worker: got msg name~n",[]),
{name, Name} = rpc(Pperson, name),
From ! {self(), {name, Name}},
worker2(Pperson);
{From, age} ->
io:format("worker: got msg age~n",[]),
{age, Age} = rpc(Pperson, age),
From ! {self(), {age, Age}},
worker2(Pperson)
end.
- ¼ç¥×¥í¥»¥¹¤Ïworker¥×¥í¥»¥¹¤È¤ä¤ê¤È¤ê¤¹¤ë¡£
worker¤Ïperson¤Ë¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ë¡£
person¤Ï¼ç¥×¥í¥»¥¹¤Ë¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ë¡£- ¼ç¥×¥í¥»¥¹¢«(rpc2(*))¢ªworker¢ªperson¢ª(*)
Pworker = spawn(?MODULE, worker, [{"Saburo", 20}]),
{name, Name} = rpc2(Pworker, {name, self()}),
io:format("start3: name: ~p~n",[Name]).
rpc2(Pid, Msg) ->
Pid ! Msg,
receive
Ans -> Ans
after 1000 -> void
end.
worker({Name, Age}) ->
Pperson = spawn(?MODULE, person, [{Name, Age}]),
worker2(Pperson).
worker2(Pperson) ->
receive
{name, To} ->
io:format("worker: got msg name2 ~n",[]),
Pperson ! {name, To},
worker2(Pperson);
end.
person({Name, Age}) ->
receive
{name, To} ->
io:format("person: got msg name2~n",[]),
To ! {name, Name},
person({Name, Age})
end.
¥³¥á¥ó¥È¤ò¤«¤¯