我使用Socket类写入和读取函数。我用SocketTimeoutException - 异常后如何继续
synchronized(socket){
.//write;
//read;
}
我这样做(重复)每50-1000毫秒。问题是有人(未知原因)拔掉电缆(我得到SocketTimeoutException)。当他再次插入时,我需要继续。 怎么办?我是否需要关闭catch块中的这个套接字并创建新的?或者是其他东西 ?
我使用Socket类写入和读取函数。我用SocketTimeoutException - 异常后如何继续
synchronized(socket){
.//write;
//read;
}
我这样做(重复)每50-1000毫秒。问题是有人(未知原因)拔掉电缆(我得到SocketTimeoutException)。当他再次插入时,我需要继续。 怎么办?我是否需要关闭catch块中的这个套接字并创建新的?或者是其他东西 ?
你不必做任何事情。继续。如果得到任何其他异常,请关闭套接字并重新启动(如果适用)。
我会创建一个愿意接收SocketTimeoutException并重试的装饰器实现。在实际传递异常之前,它可以重试一定次数,超过一定的时间间隔以指示“真实”(待定义)错误状态。它甚至可以无限期地重试,如果你想。重试逻辑甚至可以封装重新建立套接字,尽管超时并不足以满足要求。
另一个选择是CircuitBreaker模式,虽然它不是专为您所描述的。 CircuitBreaker对于避免一段时间内可能发生的代价高昂的错误稍微好一些。
阅读心跳 – 2011-03-07 12:59:01
'SocketTimeoutException'是一个致命的异常,如果你必须继续,你需要一个新的连接,并可能保持已完成的状态。 – bestsss 2011-03-07 22:52:46