关于so​​cket的erlang一般问题

时间:2010-11-16 13:00:31

标签: erlang

我对我应该为分布式系统课程实施的项目提出疑问。

该项目包括设计和实现一个为用户进程提供可靠多播服务的库。所有进程都属于一个组,成员进程将消息发送给该组的所有成员。发件人被排除在收件人列表之外。

在我看来,这很容易在erlang中实现,因为它的消息传递结构...如果你使用rpc调用而不是基于普通套接字的实现,会给出更多的点。

现在我的问题是:这个项目的一个强制要求是当进程之间没有进行通信时,套接字不会保持打开状态......

我们的课程是用C语言保存的,但是我们可以自由使用我们喜欢的任何语言......我可以使用erlang节点和rpc调用来满足这个约束吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

是。 rpc模块甚至具有multicall,它接收节点列表并完全按照您的描述进行操作。当它不使用时,它不会打开你的插座。

答案 1 :(得分:2)

尽管其他答案都说,但Erlang的默认行为并不能满足您的约束。

使用Erlang分发的典型Erlang节点网络将保持密集连接(每个节点连接到每个其他节点),即使您不使用它们也会打开TCP套接字。您将不得不使用-connect_all false并自行管理打开/关闭与其他节点的连接,或者您必须开发自己的分发协议。我会推荐后者,特别是因为你正在学习。使其变得简单的技巧是使用term_to_binary和binary_to_term。