2009-12-22 5 views
3
([email protected])8> spawn([email protected], tut, test, [hello, 5]). 

Я хочу вызвать процесс на bar.del.com, который не имеет доступа к файловой системе к foo.hyd.com (откуда я не создавал процесс), работает подпрограмма «test» модуля «tut».Spawn удаленный процесс без общей файловой системы

Есть ли способ сделать это, без предоставления [email protected] скомпилированного файла модуля «tut»?

+2

12 вопросов, никто не принимал ... – jldupont

ответ

3

Вы можете использовать следующую функцию для загрузки модуля на удаленном узле без предоставления самого файла:

load_module(Node, Module) -> 
    {_Module, Bin, Filename} = code:get_object_code(Module), 
    rpc:call(Node, code, load_binary, [Module, Filename, Bin]). 

Как отмечалось в аргументе code:load_binary/3Filename используется только для отслеживания пути к модулю, а файл, на который указывает он, не используется локальным узлом_сервера.

0

Вы можете отправить локальный код на удаленный узел:

> {Mod, Bin, File} = code:get_object_code(Module). 
> rpc:call(RemoteNode, code, load_binary, [Mod, File, Bin]). 
3

Я интерпретирую ваш вопрос как желание не копировать * .beams из вашей файловой системы в удаленную файловую систему.

Если вы просто проверяете вещи, вы можете использовать вызов nl(Mod) в оболочке erl для загрузки модуля на все (в настоящее время) известные узлы. То есть те, которые отображаются в nodes().

Это отправит код и загрузит его из копии памяти, он не сохранит его в удаленной файловой системе.

Вы также можете запустить удаленный узел с помощью модуля slave. Ведомый получает доступ к файловой системе своего хозяина и кодовому серверу. Обычная автоматическая загрузка будет затем убедиться, что модуль существует в подчиненном устройстве, когда вы вызываете функцию test:tut/2.

+0

эй это была полезная информация, я этого не знал. Спасибо! – Unoti