-1

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

我认为这里的棘手之处在于套接字连接中的角色,即服务器和客户端。我所关心的情况需要一种对称的方式来相互连接(每个主机都是等效的)。但是,socket 只能提供一种非对称方式,必须有服务器和客户端。

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

谁能提出更好的解决方案,或者只是告诉我这个是最好的?:) 感谢您出色的洞察力。

4

2 回答 2

0

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

于 2013-09-04T05:50:02.433 回答
0

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

如果出现某些两台主机之间突然出现两条连接的情况,则可以使用每个节点的 IP 地址来确定关闭哪个连接。例如,具有较大 IP 的主机关闭其客户端连接,而具有较小 IP 的主机关闭其服务器连接(无论您如何定义 IP 的“较小”和“较大”值,只要两者相同即可),另一个连接仍然存在。

于 2013-09-04T08:12:00.003 回答