我应该模拟一个 p2p 协议(protocol)(使用 Java),其中每个节点最初都与一个邻居建立连接。然后,使用发现算法,每个节点找到新的潜在邻居,并且它可以与其中一些连接。
假设overlay网络的两个节点,比如A和B,互不相邻:如果他们同时发现自己会怎样? A向B发送连接请求,B向A发送连接请求,这样就建立了两个TCP连接,但是两者中有一个是没用的...
- 有没有办法避免这个问题?
- 或者,如果最坏的情况发生了这个问题,我怎样才能发现没有必要断开连接?
假设每个节点都有一个唯一的ID,将每个连接与两个邻居的ID相关联就足够了,这样节点就可以定位并消除一些重复的连接。这可能是一个解决方案,但是......是否有更好的解决方案来打破任何重复的连接?
最佳答案
一个基本的解决方案是确保打开出站连接和入站连接是不能同时执行的操作。您可以为此使用并发原语。
如果这些操作成为顺序操作,那么就很容易避免双重链接:跟踪所有当前打开的连接(入站和出站)。然后当请求入站连接时,检查是否已经有出站连接。如果是这样,请拒绝新的。
关于java - 如何避免两个节点之间的双重连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8961829/