diff --git a/internal/iplibrary/manager_ip_list.go b/internal/iplibrary/manager_ip_list.go index 717ab26..f6c6311 100644 --- a/internal/iplibrary/manager_ip_list.go +++ b/internal/iplibrary/manager_ip_list.go @@ -53,6 +53,7 @@ func (this *IPListManager) Start() { events.On(events.EventQuit, func() { ticker.Stop() }) + countErrors := 0 for { select { case <-ticker.C: @@ -60,14 +61,19 @@ func (this *IPListManager) Start() { } err := this.loop() if err != nil { + countErrors++ + logs.Println("IP_LIST_MANAGER", err.Error()) - // 方便立即重试 - select { - case IPListUpdateNotify <- true: - default: - + // 连续错误小于3次的我们立即重试 + if countErrors <= 3 { + select { + case IPListUpdateNotify <- true: + default: + } } + } else { + countErrors = 0 } } } diff --git a/internal/rpc/rpc_client.go b/internal/rpc/rpc_client.go index 8e63464..9d9fb89 100644 --- a/internal/rpc/rpc_client.go +++ b/internal/rpc/rpc_client.go @@ -181,9 +181,14 @@ func (this *RPCClient) pickConn() *grpc.ClientConn { // 检查连接状态 if len(this.conns) > 0 { availableConns := []*grpc.ClientConn{} - for _, conn := range this.conns { - if conn.GetState() == connectivity.Ready { - availableConns = append(availableConns, conn) + for _, state := range []connectivity.State{connectivity.Ready, connectivity.Idle, connectivity.Connecting} { + for _, conn := range this.conns { + if conn.GetState() == state { + availableConns = append(availableConns, conn) + } + } + if len(availableConns) > 0 { + break } }