簡體   English   中英

無法在Erlang中生成一個簡單的服務器

[英]Cannot spawn a simple server in 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()},
        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的“-sname”/“ - name”標志啟動我的shell erlang節點而沒有短名稱/長名稱時,我收到相同的錯誤消息。

如果啟動此shell以便它可以參與分發,則還必須確保在遠程節點上加載simple_server的代碼,或者遠程節點可以從其代碼路徑自動加載它。

對於交互式使用,您可以使用shell中的nc(File)nl(Module)命令加載所有已知節點。 如果在執行erlang:nodes()時尚未列出節點,請使用net_adm:ping(Node)net_adm:ping(Node)執行ping操作。

你應該先閱讀文檔。 一些教程會有所幫助。

  1. erl與模塊源代碼沒有任何關系。 閱讀erl -man erl了解更多信息。
  2. erlang:apply\\2Node作為第一個參數,但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>

作為一個好的起點,你可以看看學習你的一些Erlang為偉大的好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM