2017-04-23 69 views
0

我用grpc爲webcam-stream創建了一個微服務。流媒體工作正常,但流的取消僅在客戶端工作。GRPC服務器正在取消客戶端

如果客戶端調用CancellableContext.cancel,則視頻流將停止,但服務器仍在使用該視頻流播放視頻。如果取消被調用,則服務器拋出Transport faild異常。

這個異常可以抓住停止在服務器端的流或其他操作嗎?

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. 

你的stacktrace的其餘部分是怎麼說的?