【问题标题】:SocketTimeoutException problem - how to continue after exceptionSocketTimeoutException问题——异常后如何继续
【发布时间】:2011-03-08 07:41:57
【问题描述】:

我使用 Socket 类在我的函数中写入和读取。我用过

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

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

【问题讨论】:

  • SocketTimeoutException 是一个致命的例外,如果你必须继续,你需要一个新的连接,并且可能保持已经完成的状态。

标签: java


【解决方案1】:

你不需要做任何事情。继续。如果您遇到任何其他异常,请关闭 Socket 并重新启动(如果适用)。

【讨论】:

    【解决方案2】:

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

    另一种选择是断路器模式,尽管它的设计并不完全符合您的描述。在避免可能在一段时间内发生的代价高昂的错误方面,CircuitBreaker 会更好一些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2021-03-25
      • 2020-11-14
      • 1970-01-01
      • 2021-06-20
      • 2018-07-06
      • 2015-03-29
      相关资源
      最近更新 更多