看到这篇文章后,我一直在修修补补mochiweb。在尝试复制文章中所做的事情时 - 基本上是设置一个 mochiweb 服务器,有两个 erlang 节点,然后在另一个节点中调用一个定义在一个节点中的函数(在两个节点之间设置 net_adm:ping() 以便他们知道每个节点之后)其他)。
在函数调用部分之前,我能够跟踪所有内容。在作为 mochiweb 服务器的 n1@localhost 中,我调用(就像在文章中所做的那样):
router:login(IdInt, self()).
然后,在 router.erl 脚本 n2@localhost 中,我定义了登录函数:
login(Id, Pid) when is_pid(Pid) ->
gen_server:call(?SERVER, {login, Id, Pid}).
handle_call({login, Id, Pid}, _From, State) when is_pid(Pid) ->
ets:insert(State#state.pid2id, {Pid, Id}),
ets:insert(State#state.id2pid, {Id, Pid}),
link(Pid), % tell us if they exit, so we can log them out
io:format("~w logged in as ~w\n",[Pid, Id]),
{reply, ok, State};
我只粘贴了代码的相关部分。但是,当我现在在浏览器上访问网络服务器时 - 我在 n1@localhost 上收到此错误报告:
=CRASH REPORT==== 11-Jun-2009::12:39:49 ===
crasher:
initial call: mochiweb_socket_server:acceptor_loop/1
pid: <0.62.0>
registered_name: []
exception error: undefined function router:login/2
in function mochiconntest_web:loop/2
in call from mochiweb_http:headers/5
ancestors: [mochiconntest_web,mochiconntest_sup,<0.59.0>]
messages: []
links: [<0.61.0>,#Port<0.897>]
dictionary: [{mochiweb_request_path,"/test/123"}]
trap_exit: false
status: running
heap_size: 1597
stack_size: 24
reductions: 1551
neighbours:
=ERROR REPORT==== 11-Jun-2009::12:39:49 ===
{mochiweb_socket_server,235,{child_error,undef}}
在谷歌搜索之后,我得到了错误想说的基本要点 - 基本上它说在 n1@localhost 中调用的登录函数没有定义 - 但它在 n2@localhost 中定义(并且两个节点都知道每个其他-我确实nodes().
检查过)!请告诉我哪里出错了!