我对我应该为分布式系统课程实施的项目提出疑问。
该项目包括设计和实现一个为用户进程提供可靠多播服务的库。所有进程都属于一个组,成员进程将消息发送给该组的所有成员。发件人被排除在收件人列表之外。
在我看来,这很容易在erlang中实现,因为它的消息传递结构...如果你使用rpc调用而不是基于普通套接字的实现,会给出更多的点。
现在我的问题是:这个项目的一个强制要求是当进程之间没有进行通信时,套接字不会保持打开状态......
我们的课程是用C语言保存的,但是我们可以自由使用我们喜欢的任何语言......我可以使用erlang节点和rpc调用来满足这个约束吗?
提前致谢
答案 0 :(得分:2)
是。 rpc模块甚至具有multicall
,它接收节点列表并完全按照您的描述进行操作。当它不使用时,它不会打开你的插座。
答案 1 :(得分:2)
尽管其他答案都说,但Erlang的默认行为并不能满足您的约束。
使用Erlang分发的典型Erlang节点网络将保持密集连接(每个节点连接到每个其他节点),即使您不使用它们也会打开TCP套接字。您将不得不使用-connect_all false并自行管理打开/关闭与其他节点的连接,或者您必须开发自己的分发协议。我会推荐后者,特别是因为你正在学习。使其变得简单的技巧是使用term_to_binary和binary_to_term。