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

2023-11-25

我在 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(使用前将#替换为@)

在 C# 客户端中为 gRPC 设置 keepalive 的相关文章

  • 使用 TCP 套接字在本地代理视频

    我一直对向媒体浏览器添加对视频播客的支持非常感兴趣 我希望用户能够浏览可用的视频播客并从互联网上流式传输它们 这真的很容易 因为媒体播放器等将愉快地播放存在于云中的文件 问题是我想在本地缓存这些文件 因此同一集的后续观看将不涉及流式传输 而
  • 为什么使用数组索引循环数组比指针访问慢?

    我正在读Kochan的书 Programming in C 在第 14 页的 指针和数组 部分中 264 他说 一般来说 索引数组的过程比执行索引过程花费更多的时间 访问指针内容的过程 其实这也是主要原因之一 为什么使用指针来访问数组的元素
  • 等待运算符错误

    我的代码有问题 我怎么解决这个问题 这个问题出现在await操作符中 public MyModel HttpClient client new HttpClient HttpResponseMessage response await cl
  • Monitor.Pulse & Wait - 意外行为

    http www codeproject com Articles 28785 Thread synchronization Wait and Pulse demystified http www codeproject com Artic
  • 提取单花括号内的值

    我想要一个收藏 value 一个字符串使用正则表达式 例如 lorem ipsum field1 lorem ipsum field2 lorem ipsum field1 lorem ipsum field2 field3 我会得到 fi
  • 值类型如何实现引用类型

    我遇到了一个值类型正在实现 ref 的场景 类型 只是想知道这怎么可能 幕后发生了什么 结构体是值类型 接口是引用 类型但结构可以实现接口而不会出现任何错误 有什么想法吗 提前致谢 实际上 它同时以两种不同的方式进行 首先 任何值类型都可以
  • C 中的 '\0' 和 printf()

    在 C 入门课程中 我了解到在存储字符串时存储空字符 0在它的最后 但是如果我想打印一个字符串怎么办 printf hello 虽然我发现它并没有结束 0通过以下声明 printf d printf hello Output 5 但这似乎不
  • 为什么 ObservableCollection 有两个集合构造函数?

    The 可观察集合 T https msdn microsoft com en us library ms668604类有两个构造函数 可以在其中传递项目集合 一个构造函数接受一个IEnumerable T 另一个List T 鉴于List
  • 为什么我收到编译错误“使用已删除的函数 'std::unique_ptr ...”

    我收到一条巨大的编译错误消息 c mingw include c 6 1 0 bits predefined ops h 123 18 error use of deleted function std unique ptr lt Tp D
  • Cookie 在 ASP.net 中失去价值

    我有以下设置 cookie 的代码 string locale DropDownList this LoginUser FindControl locale SelectedValue HttpCookie cookie new HttpC
  • 如何解析多态 JSON 数组?

    我有一个 JSON 格式的文件 其中包含个人用户的记录 一些用户的记录中间有一个评论字段 我只想解析顶级项目 全名 贡献者姓名 电子邮件 使用 Newtonsoft JSON 解析器 但我似乎无法让它识别单个对象 当我将整个字符串解析为一个
  • 如何将输出重定向到 boost 日志?

    我有一个使用boost log的C 程序 我加载了用户提供的动态链接库 我想将 stderr 重定向到 boost 日志 以便用户的库随时执行以下操作 std cerr lt lt Some stuff 它产生相同的结果 BOOST LOG
  • 如何将 Boost Spirit 自动规则与 AST 结合使用?

    编辑 当我想在另一个规则上使用它时 我扩展了 sehe 的示例以显示问题 http liveworkspace org code 22lxL7 http liveworkspace org code 22lxL7 17 我正在尝试提高 Bo
  • 我的代码哪里有泄漏?

    下面是我的代码 它打开一个 XML 文件 old xml 过滤无效字符并写入另一个 XML 文件 abc xml 最后 我将再次加载 XML abc xml 当执行以下行时 出现异常 表示 xml 文件被另一个进程使用 xDoc Load
  • C++ 模板参数数量错误(2,应该是 1)

    我使用 C 并行快速排序程序进行了测试 如下所示 首先使用列表作为容器 然后我转移到通用容器类型 但它报告了标题错误 可以帮忙解决这个问题吗 include
  • 快速将文本附加到文本框

    我有一个BackgroundWorker正在发布消息的线程 使用BeginInvoke在 GUI 中的文本框中 方法 write debug text 在文本框中显示文本使用AppendText并将文本写入Console 外观上是这样的Ba
  • 如何解决 boost::multi precision::cpp_dec_float 除法错误

    除以boost multiprecision cpp dec float有某种舍入误差 如下 include
  • 如何使用 .NET 捕获我的桌面视频?

    我想知道是否有任何方法可以使用 NET 捕获我的桌面的视频 截屏视频 我并不是在寻找截屏软件 而只是在寻找一种可以让我自己生成桌面视频的技术 我想过拍摄多个屏幕截图 但我不确定如何以编程方式生成带有图像序列的视频 有人有主意吗 Thanks
  • 调用泛型类的方法

    这是上下文 我尝试编写一个映射器来动态地将域模型对象转换为 ViewModel 对象 我遇到的问题是 当我尝试通过反射调用泛型类的方法时 出现此错误 System InvalidOperationException 无法对 Contains
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin

随机推荐

  • 如何从 Windows 服务调用 Web API

    我有一个用 Windows 服务编写的应用程序 该应用程序需要调用用 Asp Net MVC 4 WebAPi 编写的 WebAPI WebAPI 中的此方法返回一个原始类型的 DTO 如下所示 class ImportResultDTO
  • 如何比较 Amazon S3 对象的版本?

    Amazon S3 存储桶的版本控制很好 但我没有看到任何比较文件版本的简单方法 无论是通过控制台还是通过我找到的任何其他应用程序 S3Browser 似乎具有最好的版本控制支持 但没有比较 有没有一种方法可以比较 S3 上文件的版本 而无
  • C# foreach 中的排序

    我是 MVC C 新手 这是一个准备好的工作代码 工作代码的一部分 foreach var item in Model div style height 200px Html Raw item Description div 问题是描述没有
  • Jquery表单提交验证

    我有以下表格
  • Cygwin 中的正确路径用法:`python c:\somefile.py` 和 `python /cygdrive/c/somefile.py` 之间的差异

    我在 Windows Cygwin 上使用 Django 1 5 和 Python 2 7 以下命令在 bash shell 中给我一个错误 python cygdrive c Python27 Lib site packages djan
  • Bash:如何遍历目录结构并执行命令?

    我已将一个大文本文件拆分为许多较小的文件集 以进行我正在进行的性能测试 有很多这样的目录 home brianly output 02 contains 2 files myfile chunk 00 and myfile chunk 01
  • Java 无法打开/创建首选项错误

    我正在尝试播放 MIDI 音频 但每当我这样做时 它都会返回错误 May 18 2014 10 23 29 AM java util prefs WindowsPreferences
  • iOS相机离开pwa后返回黑屏

    我正在使用 html 文件输入打开相机并为我的 PWA 拍照
  • 找到最长连续数字序列的长度[重复]

    这个问题在这里已经有答案了 我有一个像这样的 numpy 数组 1 1 1 1 1 1 1 1 1 1 1 1 1 1 我想找到 1 或 1 的最长连续序列的长度 在示例中 它应该是 3 在纯Python中 gt gt gt from it
  • PyCharm导入外部库

    我在 Houdini 中使用 PyCharm 作为 python 代码的编辑器 每当我尝试导入主 Houdini 库 hou 时 我都会在 PyCharm 中收到错误标记 如果我包含代码片段 try import hou except Im
  • jQuery nth-child 在之后添加 html

    我有一个简单的无序列表 其中包含 16 个列表项 我想使用 jQuery 在每四个现有列表项之后添加一个新列表项 我该怎么做呢 代码如下 ul li some stuff li li some stuff li li some stuff
  • 在内存限制的嵌入式系统中使用boost

    我们正在使用 C 开发一个在嵌入式系统上的 Windows CE 4 中运行的应用程序 我们的限制之一是应用程序使用的所有内存都应在仅启动 我们编写了许多仅使用预先分配的内存而不是分配新内存的容器和算法 您认为在这种情况下我们可以使用 bo
  • QListView 当列表为空时显示文本

    当 QListView 中没有项目时 我想显示一些文本 例如 没有项目 我尝试重写QListView的paintEvent方法 但没有任何效果 下面的代码展示了一种简单的方法 通过重载paintEvent视图的方法 文本的绘制可能应该使用样
  • jQuery 表单验证不起作用

    我花了几个小时在这上面 但我不知道为什么这个 jquery validate 不起作用 我最后把它分解到最低限度 但它仍然不起作用 这是实际的代码
  • 如何通过GA4测量协议识别用户所在国家

    可以通过 GA4 测量协议检索地理位置吗 我必须如何配置 json 正文来发送地理位置 例如通过 HitBuilder 我有同样的问题 并在下面的票证中询问谷歌 https issuetracker google com issues 23
  • .Net 和 iPhone 之间的 AES 互操作性?

    我需要加密 iPhone 上的字符串并将其发送到 Net Web 服务进行解密 我可以在 iPhone 上使用 Net 进行加密 解密 但来自 iPhone 的加密字符串无法通过 Net 解密 我收到的错误是 填充无效且无法删除 Net代码
  • 如何使用 PHP 连接 Dropzone.js 上传的分块文件?

    我使用 Dropzone js 获取各种类型的文件 包括图像和非图像 例如 PDF 并将它们以 1mb 块的形式上传到我们的服务器 然后 我尝试使用 PHP 连接这些文件 然后将它们上传到我们公司的 FileMaker 数据库 到目前为止
  • 在 github 操作上运行 firebase 模拟器

    我正在尝试在 Github Actinos 上运行测试 但经过多次尝试后我无法做到这一点 接收 错误 firestore Firestore 模拟器已退出 因为未安装 java 您可以从以下位置安装它https openjdk java n
  • PHP sendmail 在 Ubuntu 命令行中工作,但不能在 php 文件中工作

    我在 Ubuntu 上使用 PHP 和 apache 安装了 sendmail 当我尝试以下命令行时 php r mail email protected test test 它成功发送电子邮件 但是 运行文件 test send mail
  • 在 C# 客户端中为 gRPC 设置 keepalive

    我在 C 中使用 gRPC 客户端并使用长期存在的双工流 但是 TCP 连接有时会关闭 因此我想在客户端中使用 keepalive 服务器 用 Go 编写 已经针对 keepalive 进行了正确配置 并且已经使用 Go 编写的客户端进行了