SocketTimeoutException问题 - 如何在异常后继续

时间:2011-03-07 12:44:08

标签: java

我使用Socket类在我的函数中编写和读取。我用了

synchronized(socket){
.//write;
//read;
}

我每隔50-1000毫秒做这个(重复)。问题是当某人(未知原因)拔掉电缆时(我得到了SocketTimeoutException)。当他再次插入时,我需要继续。 该怎么办 ?我是否需要在catch块中关闭此套接字并创建新的?或其他什么?

2 个答案:

答案 0 :(得分:0)

您无需做任何事情。继续吧如果您收到任何其他异常,请关闭套接字并重新启动(如果适用)。

答案 1 :(得分:0)

我创建了一个愿意捕获SocketTimeoutException并重试的Decorator实现。它可以在实际传递异常之前的某个时间间隔内重试一定次数,以指示“真”(待定义)错误条件。如果你愿意,它甚至可以无限期地重试。重试逻辑甚至可以封装重新建立套接字,尽管超时不足以要求它。

另一种选择是CircuitBreaker模式,虽然它不是为你所描述的设计的。 CircuitBreaker可以更好地避免在一段时间内可能发生的代价高昂的错误。