如何巧妙应对go grpc连接重置为对等方的问题,实现稳定通信?

2026-04-11 06:350阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计922个文字,预计阅读时间需要4分钟。

如何巧妙应对go grpc连接重置为对等方的问题,实现稳定通信?

最近添加了新功能,用户直接通过grpc+stream的方式向服务端发送数据。偶尔会收到错误。现象如下:+ 已建立连接,并持续使用。+ 突然client.Send返回eof。+ 客户端报错: 连接已关闭。

最近添哥一直反映,他手下的设备以grpc stream的方式向我服务端发送数据。偶然会收到错误。现象如下:

  1. 连接已经建立了一段时间,正常使用。
  2. 突然client.Send 返回 eof。
  3. 客户端有报错:connection reset by peer
  4. 在服务端找到错误:context canceled

这里不得不提一下,客户端上报到服务的网络环境并不是很好,而且服务端每个进程有数十万个协程在运行,处理上十万条grpc stream。

选取了几个设备在服务端与客户端tcpdump,通过七七四十九天,终于捕获到了异常时的抓包。

现象:

  1. 正常情况下,服务端客户端定期互Ping。
  2. 当异常时,在服务端/客户端的抓包会发现Ping包未回。很快连接断开。

猜测和grpc keepalive功能有关。

阅读全文
标签:

本文共计922个文字,预计阅读时间需要4分钟。

如何巧妙应对go grpc连接重置为对等方的问题,实现稳定通信?

最近添加了新功能,用户直接通过grpc+stream的方式向服务端发送数据。偶尔会收到错误。现象如下:+ 已建立连接,并持续使用。+ 突然client.Send返回eof。+ 客户端报错: 连接已关闭。

最近添哥一直反映,他手下的设备以grpc stream的方式向我服务端发送数据。偶然会收到错误。现象如下:

  1. 连接已经建立了一段时间,正常使用。
  2. 突然client.Send 返回 eof。
  3. 客户端有报错:connection reset by peer
  4. 在服务端找到错误:context canceled

这里不得不提一下,客户端上报到服务的网络环境并不是很好,而且服务端每个进程有数十万个协程在运行,处理上十万条grpc stream。

选取了几个设备在服务端与客户端tcpdump,通过七七四十九天,终于捕获到了异常时的抓包。

现象:

  1. 正常情况下,服务端客户端定期互Ping。
  2. 当异常时,在服务端/客户端的抓包会发现Ping包未回。很快连接断开。

猜测和grpc keepalive功能有关。

阅读全文
标签: