我在 C# 中使用 gRPC 客户端并使用长期存在的双工流。但是,TCP 连接有时会关闭,因此我想在客户端中使用 keepalive。服务器(用 Go 编写)已经针对 keepalive 进行了正确配置,并且已经使用 Go 编写的客户端进行了测试。
我使用以下代码将 keepalive 设置为 5 分钟,并启用跟踪以查看所有传入/传出字节。
Environment.SetEnvironmentVariable("GRPC_TRACE", "tcp,channel,http,secure_endpoint");
Environment.SetEnvironmentVariable("GRPC_VERBOSITY", "DEBUG");
var callCredentials = CallCredentials.FromInterceptor(Interceptor());
var roots = Encoding.UTF8.GetString(Resources.roots);
Channel = new Channel(address, ChannelCredentials.Create(new SslCredentials(roots), callCredentials), new[]
{
new ChannelOption("grpc.keepalive_time_ms", 5 * 60 * 1000), // 5 minutes
});
await Channel.ConnectAsync(DateTime.UtcNow.AddSeconds(5));
但是,在日志中,5 分钟内没有发送任何字节,并且连接已关闭,因为在流空闲一段时间后我无法再通过同一流发送/接收消息。
我如何正确启用保活?
尝试在客户端添加以下 ChannelOption。
new ChannelOption("grpc.keepalive_permit_without_calls", 1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)