2010-06-28 6 views
4

J'ai un simple serveur:Impossible frayer un serveur simple 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). 

Puis-je obtenir ceci:

...\code>erl simple_server.erl 

Eshell V5.7.5 (abort with ^G) 
1> Server = spawn('[email protected]', fun simple_server:loop/0). 

=ERROR REPORT==== 28-Jun-2010::10:46:29 === 
** Can not start erlang:apply,[#Fun<simple_server.loop.0>,[]] on [email protected]** 
<0.33.0> 

Qu'est-ce que je manque?

Répondre

3

Il ne semble pas que vous ayez démarré en tant que nœud réparti. Je reçois le même message d'erreur lorsque mon nœud shell erlang est démarré sans nom court/nom long en utilisant le drapeau "-sname"/"-name" de erl. Si vous démarrez ce shell afin qu'il puisse participer à la distribution, vous devez également vous assurer que le code de simple_server est chargé sur le noeud distant ou que le noeud distant peut le charger automatiquement à partir de son chemin de code.

Pour une utilisation interactive, vous pouvez utiliser les commandes nc(File) ou nl(Module) dans le shell pour charger tous les nœuds connus. Utilisez net_adm:ping(Node) pour envoyer une requête ping au nœud s'il n'est pas déjà répertorié lorsque vous exécutez erlang:nodes().

+0

Oui, il me manquait le drapeau '-sname', merci! –

+0

+1 pour 'net_adm: ping/1' –

1

Vous devez d'abord lire la documentation. Un tutoriel serait utile.

  1. erl avec le code source du module n'a rien. Lisez erl -man erl pour plus d'informations.
  2. erlang:apply\2 a Node comme premier argument mais Node devrait exister et doit être connecté au nœud actuel.

Vous devriez essayer:

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

Comme point de départ, vous pouvez regarder Learn You Some Erlang For Great Good.