一组进程之间的.Net对等通信

时间:2011-03-03 04:16:10

标签: .net ipc p2p cluster-computing

我想让一组进程能够相互通信。这些流程可以随时可用,并且没有明显的“主要”或“服务器”流程,因此流程确实需要能够在完全对等的基础上进行通信。

我理解进程间通信和不同的通信方法(TCP,命名管道等......)但我真的不明白对等集群是如何工作的,特别是每个客户端如何有效地确定其他的列表客户端。

有没有办法在.Net中使用现有技术实现这一目标? (例如WPF)

如果不这样做,我应该在哪里寻找有关点对点通信协议的信息?

1 个答案:

答案 0 :(得分:3)

对分布式点对点协调的BitTorrent协议的研究可能是一个很好的起点:http://www.bittorrent.org/beps/bep_0003.html

其他需要调查的系统可能是Tor分布式匿名网络和Windows Internet名称服务(WINS)。这些都涉及同行发现和协调在某种程度上。

建立P2P集群最棘手的部分可能是找到一个新对等体发现对等集群的可靠方法。使用预定义的TCP端口号将是一个开始,但当该端口已被某些其他进程使用时会崩溃。您可以使用UDP广播来查明是否存在任何对等端,但这不会使其跨越您的第一个路由器跳,因为路由器通常会过滤广播以防止广播传播风暴。您可以使用集中式跟踪器/调度程序,但这会成为整个对等集群的单点故障。

网络拓扑也会影响您的发现方法。如果所有对等体都在同一网段内,或者在同一防火墙后面,那么您可以做任何事情。但是,如果某些对等设备位于防火墙后面,则无法通过防火墙启动与它们的连接 - 它们必须启动与您的连接,或使用UPNP在防火墙中打开传入端口。

发现是BitTorrent系统中最薄弱的部分。除非用户知道要使用的torrent目录或跟踪器URL,否则torrent客户端是无用的。找到节点后,对等集群中的任何节点都可以找到集群的其余成员。

如果您的进程集合都驻留在同一台物理计算机上,您可以使用类似消息队列服务的方式充当瞬态进程之间的第三方仲裁者。否则,您可能正在考虑让对等组中的一个进程处于领导地位,以回答发现请求并将对等列表分发给其他人。当需要引导进程时,它可以将引导权移交给其他对等方之一,或者对等方可以使用分布式对等方列表故障转移到新的引导进程。这基本上就是Windows名称服务(WINS)为NetBios名称发现所做的事情。