[英]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操作。
你應該先閱讀文檔。 一些教程會有所幫助。
erl -man erl
了解更多信息。 erlang:apply\\2
將Node
作為第一個參數,但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.