我正在使用C#中的gRPC客户端,并使用长期存在的双工流。然而,TCP连接在某个时候关闭,因此我想在客户端中使用保持活动功能。服务器(用Go编写)已正确配置为保持活动,并已与用Go编写的客户端进行了测试。
我使用以下代码设置5分钟的keepalive,并启用跟踪以查看所有传入/传出的字节。
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分钟内没有发送任何字节,如果流在一段时间内处于空闲状态,则连接将关闭,因为我无法再通过同一流发送/接收消息。
我应该如何正确启用keepalive?