У меня есть два узла с разными файлами cookie. Я пытаюсь позвонить, как написано ниже, но каждый раз получаю {badrpc, nodedown}.

onenode@localhost>rpc:call(othernode@localhost,erlang,system_info,[otp_release]).

Я попытался найти в Google и в итоге перешел по ссылкам, чтобы попробовать их, но все равно «безуспешно».

Вот некоторые из ссылок, которые я пробовал:

Ссылка 1

Ссылка 2

Ссылка 3

Не могли бы вы мне помочь?

РЕДАКТИРОВАТЬ -1: оба узла размещены на localhost.

1
Madhusudan Joshi 31 Дек 2017 в 21:54

2 ответа

Лучший ответ

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

erlang:set_cookie(other_node@localhost, other_node_cookie).

Дополнительная информация: http://erlang.org/doc/reference_manual/distributed.html

2
David Sulc 22 Янв 2018 в 05:56

Согласно rpc.erl, Он выполняет общий вызов erlang с использованием модуля gen_server, а gen_server использует модуль gen.erl для вызова и здесь он использует параметр noconnect как параметры erlang:send/3.
Согласно документации Erlang:

Если узел назначения должен быть автоматически подключен для отправки, вместо этого возвращается noconnect.

Другая проблема - разные файлы cookie. Согласно документации Erlang:

Когда узел пытается подключиться к другому узлу, сравниваются волшебные файлы cookie. Если они не совпадают, подключенный узел отклоняет соединение.

Поэтому, если между узлами нет никакого соединения, ваш вызов не создаст его, и вы не сможете соединить узлы Erlang с разными куки.

1
Pouriya 31 Дек 2017 в 22:07