Java 在P2P架构中使用超时

Java 在P2P架构中使用超时,java,timeout,rmi,p2p,token,Java,Timeout,Rmi,P2p,Token,我正在用Java编写一个P2P应用程序。更具体地说,我使用RMI来实现令牌环式节点间通信系统 为了实现容错系统,我需要检测节点的崩溃。环中的每个节点都必须等待令牌X秒。在此之后,节点必须唤醒并执行一些操作(例如,它可以拉取令牌)。我可以使用哪种方法在每个节点中实现超时 提前谢谢 这是P2P系统中的一个经典问题。简单的回答是:如果您在选择的延迟之后没有从远程对等方获得答案,那么您必须假设它是不可访问的(并冒着出错的风险) 这并不一定意味着远程对等机脱机或崩溃,它可能只是意味着有人在海洋深处切断了一

我正在用Java编写一个P2P应用程序。更具体地说,我使用RMI来实现令牌环式节点间通信系统 为了实现容错系统,我需要检测节点的崩溃。环中的每个节点都必须等待令牌X秒。在此之后,节点必须唤醒并执行一些操作(例如,它可以拉取令牌)。我可以使用哪种方法在每个节点中实现超时


提前谢谢

这是P2P系统中的一个经典问题。简单的回答是:如果您在选择的延迟之后没有从远程对等方获得答案,那么您必须假设它是不可访问的(并冒着出错的风险)

这并不一定意味着远程对等机脱机或崩溃,它可能只是意味着有人在海洋深处切断了一条电缆,没有其他方式穿越海洋,或者任何其他通道过载,无法满足您的带宽/连接请求


最根本的问题是,无论您如何努力,当您注意到远程对等机出现问题时(例如,是否有人切断了电缆或对等机确实崩溃了?),您都无法确定连接发生了什么情况

这是P2P系统中的一个经典问题。简单的回答是:如果您在选择的延迟之后没有从远程对等方获得答案,那么您必须假设它是不可访问的(并冒着出错的风险)

这并不一定意味着远程对等机脱机或崩溃,它可能只是意味着有人在海洋深处切断了一条电缆,没有其他方式穿越海洋,或者任何其他通道过载,无法满足您的带宽/连接请求


最根本的问题是,无论您如何努力,当您注意到远程对等机出现问题时(例如,是否有人切断了电缆或对等机确实崩溃了?),您都无法确定连接发生了什么情况

嗨!谢谢你的回答!我完全同意你的看法。问题是,节点正在等待令牌,正在等待其他节点调用其远程方法“passToken”。所以,我的问题是:在Java中,在选定的延迟之后执行操作的最佳方法是什么?我知道类计时器,但我更喜欢避免使用线程。@Davide有一个名为Quartz scheduler的库,用于复杂的作业,但您可以从简单的东西开始,比如java.util.concurrent包中的ScheduledExecutorService。它允许您在延迟一段时间后提交要执行的作业。谢谢!我将尝试应用您的解决方案!有趣的是,你在评论中回答了OP的问题,而不是在回答中。然而,对于这一有趣的发展,+1。嗨!谢谢你的回答!我完全同意你的看法。问题是,节点正在等待令牌,正在等待其他节点调用其远程方法“passToken”。所以,我的问题是:在Java中,在选定的延迟之后执行操作的最佳方法是什么?我知道类计时器,但我更喜欢避免使用线程。@Davide有一个名为Quartz scheduler的库,用于复杂的作业,但您可以从简单的东西开始,比如java.util.concurrent包中的ScheduledExecutorService。它允许您在延迟一段时间后提交要执行的作业。谢谢!我将尝试应用您的解决方案!有趣的是,你在评论中回答了OP的问题,而不是在回答中。然而,对于这一有趣的发展,+1。