在 golang 中更新 grpc 的接收和发送消息大小

Posted

技术标签:

【中文标题】在 golang 中更新 grpc 的接收和发送消息大小【英文标题】:Updating receive and send message size for grpc in golang 【发布时间】:2019-01-10 22:32:11 【问题描述】:

我有用 Go 编写的 grpc 服务器,我正在尝试使用以下代码将接收和发送消息大小更新为 20MB,而不是默认的 4MB

var s *grpc.Server
s = grpc.NewServer(grpc.MaxRecvMsgSize(1024*1024*20), grpc.MaxSendMsgSize(1024*1024*20))

pb.RegisterProductServer(s,mysrv)

但上面的方法似乎不起作用,因为当我尝试从客户端received message larger than max (5807570 vs. 4194304)" 调用时仍然收到错误消息 不确定是什么覆盖了大小

【问题讨论】:

【参考方案1】:

我还没有机会对此进行测试,但是您是否尝试过从客户端存根添加相同的选项?可以附加相同的选项作为拨号选项:

maxMsgSize := 1024*1024*20
conn, err := grpc.Dial(address, grpc.WithDefaultCallOptions(grpc.MaxRecvMsgSize(maxMsgSize), grpc.MaxSendMsgSize(maxMsgSize)))
if err != nil 
    // ...

defer conn.close()
client := pb.NewProductClient(conn)
// ...

我对您的用例一无所知,但如果您的响应数据可以分段传送,那么streaming APIs 可能会有用。

【讨论】:

谢谢!我们不能在服务器级别而不是客户端来控制它吗 从文档看来你不能(如果你上面的方法不能解决问题,我认为其他任何方法都不会)。也许在 GitHub 存储库中提交功能请求? github.com/grpc/grpc-go/issues 嘿@kingkupps,不使用grpc.WithDefaultCallOptions,还有其他方法吗?因为,此数据类型仅在同一更高版本的 grpc 中定义。而且,我对更新我的 grpc 版本有一些限制。

以上是关于在 golang 中更新 grpc 的接收和发送消息大小的主要内容,如果未能解决你的问题,请参考以下文章

Golang gRPC实现内网穿透

golang grpc-源码-网络模型

golang grpc 双向

golang使用grpc

grpc的简单用例 (golang实现)

Golang gRPC默认值