이전 포스팅에서 gRPC Streaming 처리방법에 대해서 알아봤습니다
2024.04.25 - [코딩/C#] - C# gRPC Streaming
그런데 대용량 데이터 전송시 Stream Server 에서 연결을 강제로 끊고 아래와 같은 오류가 발생되었습니다.
status(statuscode="internal",detail="Error reading next message, IOException: The request was aborted. Http2StreamException:The HTTP/2 server reset the stream. HTTP/2 error code 'INTERNAL_ERROR' (0x2)
확인해보니 몇 천건이면 상관없는데 10000건 이상의 데이터를 Stream 으로 전달하게 되면
연결이 끊어지고 데이터 전달이 되지 않았습니다.
MaxSendMessageSize, MaxReceiveMessageSize 등을 늘려 보았지만 소용없었고
deadline 을 적용해 봐도 안됨, Handler 를 이용해 봤지만 소용없음 등등 여러가지 시도해봤지만
해결이 안되었습니다.
해결방법은 responseStream.WriteAsync() 로 데이터 전달하기전에
아래 코드를 넣어 WriteOptions 을 BufferHint 로 주면 해결됩니다.
responseStream.WriteOptions = new WriteOptions(WriteFlags.BufferHint);
위 옵션은 성능에 영향을 준다고 나오기는 하는데 성능보다 통신이 되는게 먼저라서...
성능에 얼마나 영향을 줄지는 지켜봐야겠습니다.
C# gRPC Interceptor 에서 WriteOptions 옵션 변경하기 (0) | 2024.04.25 |
---|---|
C# gRPC Interceptor 사용하기 (0) | 2024.04.25 |
C# gRPC Streaming (0) | 2024.04.25 |
C# gRPC 를 이용해 Server와 Client 통신 처리하기 (0) | 2024.04.25 |
C# Prometheus, OpenTelemetry 이용하여 매트릭 데이터 보기 (0) | 2024.04.24 |