Java 我如何知道GRPC连接是否已丢失?

Java 我如何知道GRPC连接是否已丢失?,java,connection,grpc,grpc-java,Java,Connection,Grpc,Grpc Java,我已经用Java实现了GRPC客户端 String host:"192.893.12.11"; int port:9090; ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host, port).usePlaintext().build(); 我想在grpc连接丢失时得到通知。如果GRPC连接已丢失,如何通知客户端?您可以使用ManagedChannel的notifyWhenStateC

我已经用Java实现了GRPC客户端

String host:"192.893.12.11";
int port:9090; 

ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host, port).usePlaintext().build();

我想在grpc连接丢失时得到通知。如果GRPC连接已丢失,如何通知客户端?

您可以使用ManagedChannel的
notifyWhenStateChanged
方法在通道状态更改时获取通知,如希望在服务器关闭时获取通知,您可以尝试以下代码:

// create a ManagedChannel 
ManagedChannel channel = ManagedChannelBuilder.forTarget(target)
        .usePlaintext()
        .build();

// add callback method
channel.notifyWhenStateChanged(ConnectivityState.SHUTDOWN, () -> System.out.println("server shutdown"));

您可以使用ManagedChannel的
notifyWhenStateChanged
方法在频道状态更改时获取通知,如希望在服务器关闭时获取通知,您可以尝试以下代码:

// create a ManagedChannel 
ManagedChannel channel = ManagedChannelBuilder.forTarget(target)
        .usePlaintext()
        .build();

// add callback method
channel.notifyWhenStateChanged(ConnectivityState.SHUTDOWN, () -> System.out.println("server shutdown"));

只要浏览一下
ManagedChannel
的JavaDocs,似乎有一种方法——它能满足您的需要吗?这种方法是如何使用的?有什么例子吗?
notifyWhenStateChanged
可能会有所帮助。它的用法应该相当简单,如中所述。注意
notifyWhenStateChanged
只能检测通道状态更改。但是,通道状态不一定反映TCP连接的生存期。TCP套接字可以保持打开(或由OS默默关闭),即使网络连接在中间被断开。因此,gRPC只能在套接字写入失败时才知道连接已断开。使用RPC的生存期更准确。如果有帮助,可以使用流式RPC。RPC被允许在TCP连接上持续多久。只要浏览一下
ManagedChannel
的JavaDocs,似乎有一种方法——它能满足您的需要吗?这种方法是如何使用的?有什么例子吗?
notifyWhenStateChanged
可能会有所帮助。它的用法应该相当简单,如中所述。注意
notifyWhenStateChanged
只能检测通道状态更改。但是,通道状态不一定反映TCP连接的生存期。TCP套接字可以保持打开(或由OS默默关闭),即使网络连接在中间被断开。因此,gRPC只能在套接字写入失败时才知道连接已断开。使用RPC的生存期更准确。如果有帮助,可以使用流式RPC。允许RPC在TCP连接上持续多久。