加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C#客户端中为gRPC设置keepalive

发布时间:2020-12-15 22:45:59 所属栏目:百科 来源:网络整理
导读:我在C#中使用gRPC客户端并使用长期双工流.但是,TCP连接在某个时间关闭,因此我想在客户端使用keepalive.已经为keepalive正确配置了服务器(用Go编写),并且已经使用Go编写的客户端进行了测试. 我使用以下代码将keepalive设置为5分钟,并启用跟踪以查看所有传入/
我在C#中使用gRPC客户端并使用长期双工流.但是,TCP连接在某个时间关闭,因此我想在客户端使用keepalive.已经为keepalive正确配置了服务器(用Go编写),并且已经使用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分钟发送的字节,并且连接已关闭,因为在流已空闲一段时间后,我无法再通过相同的流发送/接收消息.

我如何正确启用keepalive?

解决方法

尝试在客户端中添加以下ChannelOption.

new ChannelOption("grpc.keepalive_permit_without_calls",1)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读