无法在Erlang中生成简单服务器
我有一个简单的服务器:无法在Erlang中生成简单服务器,erlang,Erlang,我有一个简单的服务器: -module(simple_server). -export([loop/0]). loop() -> receive {fact, N, Sender} -> Sender ! {factResult, fact(N), self()}, loop(); {fib, N, Sender} -> Sender ! {fibResult, fib(N), self()},
-module(simple_server).
-export([loop/0]).
loop() ->
receive
{fact, N, Sender} ->
Sender ! {factResult, fact(N), self()},
loop();
{fib, N, Sender} ->
Sender ! {fibResult, fib(N), self()},
loop();
{stop, Sender} ->
Sender ! ok
end.
fact(0) -> 1;
fact(N) -> N * fact(N - 1).
fib(N) -> fib(N, 1, 0).
fib(0, _B, A) -> A;
fib(N, B, A) -> fib(N-1, A+B, B).
然后我得到这个:
...\code>erl simple_server.erl
Eshell V5.7.5 (abort with ^G)
1> Server = spawn('server@myserver', fun simple_server:loop/0).
=ERROR REPORT==== 28-Jun-2010::10:46:29 ===
** Can not start erlang:apply,[#Fun<simple_server.loop.0>,[]] on server@myserver**
<0.33.0>
我错过了什么?您应该先阅读文档。一些教程会很有帮助 带有模块源代码的erl没有任何功能。阅读erl-MANERL了解更多信息。 erlang:apply\2将节点作为第一个参数,但节点应该存在并且必须连接到当前节点。 你应该试试:
$ erl
Erlang R13B04 (erts-5.7.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.5 (abort with ^G)
1> c(simple_server).
{ok, simple_serevr}
2> spawn(simple_server, loop, []).
<0.33.0>
3>
这是一个很好的起点。它看起来不像是一个分布式节点。当使用的-sname/-name标志在没有短名称/长名称的情况下启动shell erlang节点时,我会收到相同的错误消息 如果启动此shell以便它可以参与分发,则还必须确保simple_server的代码已加载到远程节点,或者远程节点可以从其代码路径自动加载 对于交互式使用,可以使用shell中的ncFile或nlModule命令在所有已知节点上加载。如果在执行erlang:nodes时节点尚未列出,请使用net_adm:pingNode对其进行ping