Go 如何在不发送/接收数据的情况下检查Conn是否处于活动状态?

Go 如何在不发送/接收数据的情况下检查Conn是否处于活动状态?,go,Go,在Go/Golang中,使用以下代码创建连接对象(Conn)后: conn, err := net.Dial("tcp","33.33.33.33:444") if err != nil { // good connection } 我想保留conn值,以便稍后验证连接是否处于活动状态。我不想时不时地重新连接以检查连接,因为这会导致操作系统上的各种等待时间,所以总体上我的要求是: 创建连接 保留连接对象 捕获连接是否因任何原因断开 不要发送或接收任何数据 关于如何实现这一点有什么想法吗

在Go/Golang中,使用以下代码创建连接对象(Conn)后:

conn, err := net.Dial("tcp","33.33.33.33:444")
if err != nil {
  // good connection
}
我想保留conn值,以便稍后验证连接是否处于活动状态。我不想时不时地重新连接以检查连接,因为这会导致操作系统上的各种等待时间,所以总体上我的要求是:

  • 创建连接
  • 保留连接对象
  • 捕获连接是否因任何原因断开
  • 不要发送或接收任何数据

关于如何实现这一点有什么想法吗?有没有一种方法可以在不发送或接收数据或重新连接的情况下捕获中断的连接?

我认为不执行操作是不可能的。如果不经常使用,当您尝试读取时,如果客户端(或某个代理)关闭了连接,则可能会出现错误。如果发生这种情况,请重新连接并重试

许多协议都会加入心跳机制来促进这类事情。然后你可以不断地阅读(如果你愿意的话,可以设置截止日期),在心跳的框架内知道出了什么问题

例如,我使用支持连接池的redis客户端。当我从池中检索idele连接时,我立即执行PING操作。如果成功,我知道连接已准备好使用。如果没有,我将获得另一个空闲连接,或者重新连接。

连接只有在使用时才处于“活动”状态。通过使用连接状态来维护连接状态,并通过读取来检测关闭的连接。