我已经为带有 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());
流式传输从一个简单的请求开始,该请求具有一个带有 State.START 的枚举。如果我调用上面的代码将状态更改为 STOP 我成为一个例外:
Exception in thread "main" java.lang.IllegalStateException: Not started
at com.google.common.base.Preconditions.checkState(Preconditions.java:174)
at io.grpc.internal.ClientCallImpl.sendMessage(ClientCallImpl.java:388)
at org.cpm42.grpcservice.ImageStreamClient.cancelStream(ImageStreamClient.java:70)
at org.cpm42.main.StreamClientMainClass.main(StreamClientMainClass.java:21)
我读过这可能是一个错误。
是否可以在服务器端获取 Sessions 或 Connections 或其他东西?
谢谢