1

我有多个节点,有两种类型。

一种类型的节点将在特定服务器上执行一项工作,另一种将执行其他操作。

我们称它们为“type1”和“type2”。

我正在启动它们:

erl -pa ebin -name type1@sub1.mydomain.com -setcookie abc
erl -pa ebin -name type2@sub2.mydomain.com -setcookie abc
erl -pa ebin -name type1@sub3.mydomain.com -setcookie abc

sub1.mydomain.com、sub2.mydomain.com 和 sub3.mydomain.com 是 Internet 上的 3 个不同服务器。

显然,type2 节点在这里将两个 type1 互连在一起。Type2 服务器是唯一一个“确定”的节点,它可以让整个事情正常工作。

Type1 服务器是动态的,所以每次我运行一个新的 type1 服务器时,它都会 ping type2 服务器以连接到所有其他节点。

问题是,当至少 2 个 type1 节点启动并运行时,我需要对工作进行集群。

所以我想从nodes()返回中确定哪个节点是type1 ...

我将能够从 atom_to_string 获取字符串,然后使用返回的字符串检查 type1,但这似乎是一种错误的方法......由于限制,也无法使用特定端口。

任何建议,将不胜感激。

4

1 回答 1

1

在 Erlang 中,节点名称是原子,原子是常量文字,因此您将无法对原子的某些部分进行模式匹配(在希腊语中,“a-tomos”的意思是“不可分割的”)。

不幸的是,您必须执行一些操作,例如将每个原子转换为字符串(字符列表),然后将您的正则表达式应用于它(看来您已经这样做了)。

说了这么多,我建议你看看:

http://learnyousomeerlang.com/distributed-otp-applications

OTP 将帮助您完成您试图通过分布式应用程序实现的许多事情。

于 2012-04-06T11:44:17.573 回答