作者:xiaonq | 来源:互联网 | 2023-02-06 16:33
我正在使用GRPC-Java 1.1.2。在一个活跃的GRPC会话中,我打开了一些双向流。当客户端断开连接时,是否可以从客户端清除它们?当我尝试断开连接时,我运行以下查找固定次数,然后断开连接,但是我在服务器端看到以下错误(虽然不确定是否是由另一个问题引起的):
与客户端断开连接
while (!channel.awaitTermination(3, TimeUnit.SECONDS)) {
// check for upper bound and break if so
}
channel.shutdown().awaitTermination(3, TimeUnit.SECONDS);
服务器错误
E0414 11:26:48.787276000 140735121084416 ssl_transport_security.c:439] SSL_read returned 0 unexpectedly.
E0414 11:26:48.787345000 140735121084416 secure_endpoint.c:185] Decryption error: TSI_INTERNAL_ERROR
Abdul Wasae..
6
如果你想关闭GRPC(服务器端或双向二)从客户端流,你将有一个附加的RPC调用Context.CancellableContext
在包中发现io.grpc
。
假设您有一个rpc:
service Messaging {
rpc Listen (ListenRequest) returns (stream Message) {}
}
在客户端,您将像这样处理它:
public class Messaging {
private Context.CancellableContext mListenContext;
private MessagingGrpc.MessagingStub getMessagingAsyncStub() {
/* return your async stub */
}
public void listen(final ListenRequest listenRequest, final StreamObserver messageStream) {
Runnable listenRunnable = new Runnable() {
@Override
public void run() {
Messaging.this.getMessagingAsyncStub().listen(listenRequest, messageStream);
}
if (mListenContext != null && !mListenContext.isCancelled()) {
Log.d(TAG, "listen: already listening");
return;
}
mListenCOntext= Context.current().withCancellation();
mListenContext.run(listenRunnable);
}
public void cancelListen() {
if (mListenContext != null) {
mListenContext.cancel(null);
mListenCOntext= null;
}
}
}
调用cancelListen()
将模拟错误“ CANCELLED”,连接将被关闭,并且onError
您的连接中将StreamObserver messageStream
带有可抛出的消息:“ CANCELLED”。
1> Abdul Wasae..:
如果你想关闭GRPC(服务器端或双向二)从客户端流,你将有一个附加的RPC调用Context.CancellableContext
在包中发现io.grpc
。
假设您有一个rpc:
service Messaging {
rpc Listen (ListenRequest) returns (stream Message) {}
}
在客户端,您将像这样处理它:
public class Messaging {
private Context.CancellableContext mListenContext;
private MessagingGrpc.MessagingStub getMessagingAsyncStub() {
/* return your async stub */
}
public void listen(final ListenRequest listenRequest, final StreamObserver messageStream) {
Runnable listenRunnable = new Runnable() {
@Override
public void run() {
Messaging.this.getMessagingAsyncStub().listen(listenRequest, messageStream);
}
if (mListenContext != null && !mListenContext.isCancelled()) {
Log.d(TAG, "listen: already listening");
return;
}
mListenCOntext= Context.current().withCancellation();
mListenContext.run(listenRunnable);
}
public void cancelListen() {
if (mListenContext != null) {
mListenContext.cancel(null);
mListenCOntext= null;
}
}
}
调用cancelListen()
将模拟错误“ CANCELLED”,连接将被关闭,并且onError
您的连接中将StreamObserver messageStream
带有可抛出的消息:“ CANCELLED”。