Как мне связаться с конкретным процессом в одном узле Erlang?

У меня есть сервер Erlang, который порождает новый процесс для каждого клиента, который подключается. Затем Pid этого нового процесса передается клиенту (чтобы установить соединение с новым процессом.) Этого достаточно, чтобы установить соединение с клиентом jinterface?

Я использую это для подключения с клиента в первую очередь:

final String SERVERNAME = "server";
final String SERVERNODE = "bertil@computer";

mbox.send (SERVERNAME, SERVERNODE, connectClient);

И эти имена устанавливаются на сервере при запуске:

start() ->
    net_kernel:start([bertil, shortnames]),
    register(server, self()).

Нужно ли регистрировать новое имя для каждого порожденного процесса? Это не было бы так динамично... Как мне решить это? Должен ли я использовать основной процесс на сервере в качестве маршрутизатора для отправки всего трафика?

1 ответ

Получив pid, вы сможете отправить сообщение непосредственно ему. В Erlang вам не нужно указывать узел, если вы получили pid. Вам нужен только узел, если вы отправляете на зарегистрированное имя, так как имена уникальны только для одного узла. Пиды уникальны во всем кластере.

Если у вас есть Varable my_pid как объект OtpErlangPid вы можете отправить так:

 mbox.send(my_pid, message);

См. Документацию по функции отправки и главу 1.6 Отправка и получение сообщений в Руководстве пользователя Jinterface.

Другие вопросы по тегам