当流调用循环很大时,Grpc 双向流被对等端终止?
Grpc bi-directional stream was terminated by peer when stream call loop is big?
我在客户端 (dart) 和服务器 (.net) 之间有双向流。当客户端有大流调用循环时我遇到了问题
在服务器上我得到
System.IO.IOException: The request stream was aborted.
---> Microsoft.AspNetCore.Connections.ConnectionAbortedException: The HTTP/2 connection faulted.
--- End of inner exception stack trace ---
at System.IO.Pipelines.PipeCompletion.ThrowLatchedException()
at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result)
at System.IO.Pipelines.Pipe.GetReadAsyncResult()
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.Http2MessageBody.ReadAsync(CancellationToken cancellationToken)
at Grpc.AspNetCore.Server.Internal.PipeExtensions.ReadStreamMessageAsync[T](PipeReader input, HttpContextServerCallContext serverCallContext, Func`2 deserializer, CancellationToken cancellationToken)
在客户端我得到
gRPC Error (code: 2, codeName: UNKNOWN, message: HTTP/2 error: Stream error: Stream was terminated by peer (errorCode: 2)., details: null)
它在小流调用循环时工作。
我尝试增加 MaxStreamsPerConnection 但仍然无效
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(serveroption => {
serveroption.Limits.Http2.MaxStreamsPerConnection = 5000;
}).UseStartup<Startup>();
});
我的应用程序使用 nginx 作为反向代理。原来是 nginx 网络服务器的问题。
我从 nginx
得到的错误
client intended to send too large chunked body: 10489464 bytes while sending request to upstream,
要解决此问题只需添加
http {
...
client_max_body_size 20M;
}
Nginx error: client intended to send too large body
我在客户端 (dart) 和服务器 (.net) 之间有双向流。当客户端有大流调用循环时我遇到了问题
在服务器上我得到
System.IO.IOException: The request stream was aborted.
---> Microsoft.AspNetCore.Connections.ConnectionAbortedException: The HTTP/2 connection faulted.
--- End of inner exception stack trace ---
at System.IO.Pipelines.PipeCompletion.ThrowLatchedException()
at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result)
at System.IO.Pipelines.Pipe.GetReadAsyncResult()
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.Http2MessageBody.ReadAsync(CancellationToken cancellationToken)
at Grpc.AspNetCore.Server.Internal.PipeExtensions.ReadStreamMessageAsync[T](PipeReader input, HttpContextServerCallContext serverCallContext, Func`2 deserializer, CancellationToken cancellationToken)
在客户端我得到
gRPC Error (code: 2, codeName: UNKNOWN, message: HTTP/2 error: Stream error: Stream was terminated by peer (errorCode: 2)., details: null)
它在小流调用循环时工作。
我尝试增加 MaxStreamsPerConnection 但仍然无效
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(serveroption => {
serveroption.Limits.Http2.MaxStreamsPerConnection = 5000;
}).UseStartup<Startup>();
});
我的应用程序使用 nginx 作为反向代理。原来是 nginx 网络服务器的问题。 我从 nginx
得到的错误client intended to send too large chunked body: 10489464 bytes while sending request to upstream,
要解决此问题只需添加
http {
...
client_max_body_size 20M;
}
Nginx error: client intended to send too large body