查看源代码 如何为 Erlang 分布实现替代节点发现

本节介绍如何为 Erlang 分布实现替代的节点发现机制。节点发现通常使用 DNS 和 Erlang 端口映射守护进程(EPMD)进行端口注册和查找。

注意

对替代节点发现机制的支持是在 Erlang/OTP 21 中添加的。

简介

要实现您自己的节点发现模块,您必须编写自己的 EPMD 模块。EPMD 模块负责提供另一个节点的位置。分布模块(inet_tcp_dist/inet_tls_dist)调用 EPMD 模块以获取另一个节点的 IP 地址和端口。作为 Erlang/OTP 一部分的 EPMD 模块将使用 DNS 解析主机名,并使用 EPMD unix 进程来获取另一个节点的端口。EPMD unix 进程通过连接到另一个节点上的众所周知的端口(端口 4369)来完成此操作。

发现模块

发现模块需要实现与常规 EPMD 模块相同的 API。但是,您可以连接到任何服务以查找其他节点的连接详细信息,而不是与 EPMD 通信。通过在启动 erlang 时设置 -epmd_module 来启用发现模块。发现模块必须实现以下回调

  • start_link/0 - 启动发现模块所需的任何进程。

  • names/1 - 返回给定主机注册器持有的节点名称。

  • register_node/2 - 使用注册器注册给定的节点名称。

  • port_please/3 - 返回给定节点使用的分布端口。

发现模块可以实现以下回调