grpc를 사용하여 웹캠 스트림 용 마이크로 서비스를 만들었습니다. 스트리밍은 잘 작동하지만 스트림의 취소는 클라이언트 측에서만 작동합니다.GRPC 서버에서 클라이언트 취소 받기
클라이언트가 CancellableContext.cancel을 호출하면 비디오 스트리밍이 중지되지만 서버는 여전히 캠을 사용하여 비디오를 스트리밍합니다. 취소가 호출되면 서버는 전송 실패 예외를 발생시킵니다.
스트리밍 또는 서버 측에서 다른 작업을 중지하기 위해이 예외를 catch 할 수 있습니까?
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)
나는 이것이 버그 일 수 있다고 읽었습니다.
세션 또는 연결 또는 다른 것을 서버 측에서 가져올 수 있습니까?
감사