【发布时间】:2017-04-29 06:12:06
【问题描述】:
我按照“Programming Erlang — Joe Armstrong”一书尝试使用 Erlang(第 14 章)在两台 Mac 计算机之间建立通信:
% file: kvs.erl
-module(kvs).
-export([start/0, store/2, lookup/1]).
start() -> register(kvs, spawn(fun() -> loop() end)).
store(Key, Value) -> rpc({store, Key, Value}).
lookup(Key) -> rpc({lookup, Key}).
rpc(Q) ->
kvs ! {self(), Q},
receive
{kvs, Reply} ->
Reply
end.
loop() ->
receive
{From, {store, Key, Value}} ->
put(Key, {ok, Value}),
From ! {kvs, true},
loop();
{From, {lookup, Key}} ->
From ! {kvs, get(Key)},
loop()
end.
设置 Mac 1 (Mac Pro) 并运行 Erlang 服务器:
$ sudo hostname this.is.macpro.com
$ hostname
this.is.macpro.com
$ ipconfig getifaddr en2
aaa.bbb.ccc.209
$ erl -name server -setcookie abcxyz
(server@this.is.macpro.com)> c("kvs.erl").
{ok,kvs}
(server@this.is.macpro.com)> kvs:start().
true
(server@this.is.macpro.com)> kvs:store(hello, world).
true
(server@this.is.macpro.com)> kvs:lookup(hello).
{ok,world}
我尝试同时使用 IP 和主机名从另一台 Mac 进行 RPC,但得到了{badrpc, nodedown}。
设置Mac 2 (MacBook Pro)并尝试调用Mac 1:
$ sudo hostname this.is.macbookpro.com
$ hostname
this.is.macbookpro.com
$ ipconfig getifaddr en2
aaa.bbb.ccc.211 # different IP
$ erl -name client -setcookie abcxyz
% try using the hostname of Mac 1 but failed
(client@this.is.macbookpro.com)> rpc:call('server@this.is.macpro.com', kvs, lookup, [hello]).
{badrpc, nodedown}
% try using the IP address of Mac 1 but failed
(client@this.is.macbookpro.com)> rpc:call('server@aaa.bbb.ccc.209', kvs, lookup, [hello]).
{badrpc, nodedown}
如何设置我的 Mac 计算机并使其可用于带有 Erlang 的 RCP?
【问题讨论】:
标签: erlang