Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GRPC服务器正在获得客户端取消_Java_Server_Netty_Grpc_Grpc Java - Fatal编程技术网

Java GRPC服务器正在获得客户端取消

Java GRPC服务器正在获得客户端取消,java,server,netty,grpc,grpc-java,Java,Server,Netty,Grpc,Grpc Java,我已经用grpc为网络摄像头流创建了一个微服务。流可以正常工作,但是流的取消只在客户端起作用 如果客户端调用CancelableContext.cancel,则视频流停止,但服务器仍在使用cam流式传输视频。如果调用取消,服务器将抛出传输失败异常 在服务器端停止流式传输或其他操作时是否可以捕获此异常 ClientCall<KameraStreamRequest, KameraStreamResponse> call = (ClientCall) imageStreamBlocking

我已经用grpc为网络摄像头流创建了一个微服务。流可以正常工作,但是流的取消只在客户端起作用

如果客户端调用CancelableContext.cancel,则视频流停止,但服务器仍在使用cam流式传输视频。如果调用取消,服务器将抛出传输失败异常

在服务器端停止流式传输或其他操作时是否可以捕获此异常

ClientCall<KameraStreamRequest, KameraStreamResponse> call = (ClientCall) imageStreamBlockingStub.getChannel().newCall(ImageStreamServiceGrpc.METHOD_IMAGE_DATA_STREAM, imageStreamBlockingStub.getCallOptions());
call.sendMessage(KameraStreamRequest.newBuilder().setStreamState(StreamState.STOP).build());
我读到这可能是一个错误

是否可以在服务器端获取会话、连接或其他内容

ClientCall<KameraStreamRequest, KameraStreamResponse> call = (ClientCall) imageStreamBlockingStub.getChannel().newCall(ImageStreamServiceGrpc.METHOD_IMAGE_DATA_STREAM, imageStreamBlockingStub.getCallOptions());
call.sendMessage(KameraStreamRequest.newBuilder().setStreamState(StreamState.STOP).build());

谢谢

这可能是一个稍有不同的问题,但对于一个简单的客户机/服务器项目,我需要添加:
channel.shutdown().awaitTermination(5秒)

io.grpc.netty.NettyServerTransport notifyTerminated
SEVERE: Transport failed
java.io.IOException: An existing connection was forcibly closed by the 
remote host. 

stacktrace的其余部分是怎么说的?

不确定它是否有用。但是,如果呼叫被取消,您可以尝试在服务器端轮询gRPC上下文,并采取相应的行动:

import io.grpc.Context;
{ ...
    Context.current().isCancelled()
 ...}