我在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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。