有没有一种使用套接字创建环形拓扑的好方法?

时间:2013-09-04 05:06:39

标签: java sockets unix networking

当我构建一些有趣的东西时,我遇到了问题。当然,我需要使用套接字在 ring 拓扑中连接多个主机(不是很多,如10个)。

我认为这里的棘手问题是套接字连接中的角色,即服务器和服务器。客户。我所关心的条件需要对称方式相互连接(每个主机都是等价的)。但是,socket只能提供非对称方式,其中必须有服务器和客户端。

实际上我已经提出了一个解决方案:对于每个主机,连接到其左邻居的套接字充当服务器,而连接到右侧的套接字充当客户端。这有效且可扩展。但无论如何,这并不是那么简单。

任何人都可以提出更好的解决方案,或者只是告诉我这个是最好的吗? :) 感谢您出色的见解。

2 个答案:

答案 0 :(得分:0)

您可以通过一种方式放松您的设计。基本上,对于两个相邻对中的每一个,在两个邻居处浮动TCP侦听器,然后让它们等待/休眠一段随机时间。谁先醒来,启动连接(使用connect())。这样,您就不必担心正确的对等体连接到左侧对等体。

答案 1 :(得分:0)

最简单,最强大的是,每个节点都有两个方向的客户端和服务器。如果没有连接,那么它会尝试双向连接。

如果出现两个主机之间突然出现两个连接的情况,则可以使用每个节点的IP地址来确定哪个连接已关闭。例如,具有较大IP的主机关闭其客户端连接,而具有较小IP的主机关闭其服务器连接(无论您如何定义IP的“较小”和“较大”值,只要它们对于两者都相同),而另一个关系还活着。