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