与gen_server相关的Erlang可伸缩性问题:call()

时间:2014-01-17 02:35:23

标签: erlang otp

在erlang otp中进行gen_server:call()时,你必须发送要拨打电话的节点的名称。

假设我有这个用例:

我有两个节点:'node1'和'node2'正在运行。我可以使用这些节点来生成gen_server:call()。

现在假设我添加了2个节点:'node3'和'node4'并相互ping通,以便所有节点都可以看到并使gen_server:相互调用。

erlang专业人员如何处理这样的新节点的动态添加,以便他们知道要输入gen_server调用的新节点名称,或者是否需要事先知道所有节点的名称以便它们是在像sys.config这样的地方硬编码?

1 个答案:

答案 0 :(得分:0)

你可以使用: erlang:nodes() 得到一个"现在"节点列表的视图

另外,您可以使用: net_kernel:monitor_nodes(true)在节点进出时通知(通过ping / crash / etc)

要查看您的模块是否在该节点上运行,您可以使用某种ping回调调用gen_server

那,或者您可以使用rpc模块在外部节点上调用erlang:whereis(name)。