代码之家  ›  专栏  ›  技术社区  ›  Yuval Adam

无法在Erlang中生成简单服务器

  •  4
  • Yuval Adam  · 技术社区  · 15 年前

    我有一个简单的服务器:

    -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>
    

    2 回复  |  直到 15 年前
        1
  •  3
  •   Christian    15 年前

    erl .

    如果启动此shell以便它可以参与分发,则还必须确保simple\u server的代码在远程节点加载,或者远程节点可以从其代码路径自动加载。

    对于交互式使用,可以使用 nc(File) nl(Module) net_adm:ping(Node) 执行此操作时,如果节点尚未列出,则对其执行ping操作 erlang:nodes()

        2
  •  1
  •   Hynek -Pichi- Vychodil Paulo Suassuna    15 年前

    1. erl与模块源代码没有任何关系。阅读 erl -man erl
    2. erlang:apply\2 Node 作为第一个论点,但是 节点 应该存在并且必须连接到当前节点。

    您应该尝试:

    $ 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>
    

    作为一个良好的起点,你可以看看 Learn You Some Erlang For Great Good