Der Remote-Knoten befindet sich in der anderen Maschine.
Ich teste vom lokalen Knoten:
%Vor% Sie können sehen, dass spawn(node,module,function,args)
funktioniert, aber spawn(node,fun)
nicht.
Die Erlang-Version auf dem Remote-Knoten ist R15, während die Version auf dem lokalen Knoten R17 ist. Ist es der Grund? Weil das Codeformat anders ist? Mir ist nicht klar, wie Erlang den Spaß-Typ bei der Übergabe an den Remote-Knoten anordnet. In Bytecode?
Hilfe bitte!
Da die Fehlermeldung, die Sie erhalten haben, angezeigt wird, wird die anonyme Funktion in diesem Kontext im Wesentlichen so behandelt, als wäre sie im Modul erl_eval
definiert. Wenn Sie die gleiche Version von erl_eval
sowohl auf dem sendenden als auch auf dem empfangenden Knoten haben, funktioniert alles einwandfrei, da in diesem Fall beide Kopien von erl_eval
die gleiche Version und Prüfsummen haben, so dass der empfangende Knoten korrekt auswerten kann anonyme Funktion, die vom sendenden Knoten übergeben wurde. Wenn die beiden Knoten jedoch unterschiedliche erl_eval
-Module haben, schlägt die Auswertung der anonymen Funktion fehl.
Eine interessante Sache ist es, die anonyme Funktion auf dem R15-Knoten zu definieren, sie in eine Binärdatei über term_to_binary/1
zu konvertieren, die resultierende Binärdatei an den 17.x-Knoten zu senden oder zu kopieren und sie wieder in einen Ausdruck umzuwandeln binary_to_term/1
, und übergeben Sie den resultierenden Ausdruck als anonyme Funktion an Ihren spawn
-Aufruf. Zuerst auf dem R15-Knoten:
Lesen Sie nun die Binärdatei in den 17.x-Knoten und stellen Sie den spawn
-Aufruf damit wieder auf den R15-Knoten:
Wie Sie sehen können - und Sie sollten es auch selbst ausprobieren - funktioniert der spawn
-Aufruf wie erwartet, weil die anonyme Funktion auf dem R15-Knoten erstellt wurde und dort auch ausgewertet wird. Der Knoten 17.x reicht ihn nur durch.
Tags und Links erlang