2017-04-23 28 views
0

grpcを使用してwebcam-streamのマイクロサービスを作成しました。ストリーミングは正常に機能しますが、ストリームのキャンセルはクライアント側でのみ機能します。GRPCサーバーがクライアントをキャンセルする

クライアントがCancellableContext.cancelを呼び出すと、ビデオのストリーミングは停止しますが、サーバーはまだカムでビデオをストリーミングしています。取り消しが呼び出された場合、サーバーはTransport faild Exceptionをスローします。

この例外は、サーバー側でストリーミングやその他の操作を停止するためにキャッチできますか?

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) 

これはバグかもしれないと読んでいます。

セッションや接続などをサーバー側で取得することは可能ですか?

おかげ

答えて

0

は、これはわずかに異なる問題である可能性がありますが、単純なクライアント/サーバープロジェクトのために私は追加する必要:channel.shutdown().awaitTermination(5, SECONDS);を例外を取り除くために要求を行うクライアント方式に。

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

残りのスタックトレースの内容は何ですか?

関連する問題