2016-06-03 5 views
1

Google에서 gRPC를 서버와 함께 사용하지만 시간이 지나면 스트림이 서버에 할당되고 앱을 닫을 때만 종료됩니다.안드로이드 요청에서 gRPC를 사용할 때 수백 개의 스트림이 서버에 할당됩니다.

 GatewayGrpc.GatewayBlockingStub stub = getGatewayBlockingStub(); 
     Gw.GetRequest request = new Gw.GetRequest(); 
     request.authToken = authToken; 
     request.requestId = requestId; 
     Gw.GetResponse response = stub.get(request); 

이 연결을 해제하는 방법?

답변

1

"수백 개의 스트림"으로 "수백 개의 연결"을 의미하는 경우 ManagedChannel을 종료하지 않았을 가능성이 큽니다. getGatewayBlockingStub()은 아마도 내부적으로 ManagedChannel을 생성하고있을 것입니다. ManagedChannel.shutdown()으로 전화해야합니다.

일반적으로 채널을 다시 사용해야합니다. 채널은 모든 TCP 연결을 느리게 초기화하고 새 RPC가 없으면 다시 연결하지 않습니다.

+0

모든 요청에 ​​대해 하나의 정적 연결 ManagedChannel을 사용하고 있습니다. 왜 연결이 커지나요? 그것은 버그입니까, 아니면 제가 잘못 했나요? –

+0

@IhorKostenko, 서버가 GOAWAY를 보낼 때 여러 연결을 사용할 수 있습니다. 새 연결이 시작되고 이전 연결은 모든 RPC가 완료 될 때까지 남아있을 수 있습니다. 그것은 보통 너무 많은 추가 연결을 생성하지 않습니다. 얼마나 많은 RPC 후에 얼마나 많은 연결을보고 있습니까? –

+0

@IhorKostenko, 제목을 다시 보아라. 수백 개의 연결이 보인다면, 그것은 거의 확실한 버그 일 것이다. 그것은 같은 문제 (백엔드 PR (broken port shutdown handling) [https://github.com/grpc/grpc-java/pull/1894]에서 참조했습니다.)가 원인 일 수 있습니다. 수백 가지의 연결은 코드에서 발생할 수있는 버그가 있다고 생각하는 것보다 훨씬 많습니다. 따라서 [새 문제] (https://github.com/grpc/grpc-java/issues/new)를 작성하여 후속 조치를 취하십시오. 알맞다. –