grpc SetHeader 和 SetTrailer 的区别和联系

问题

在使用grpc过程中发现,发送 matedata 有两种方式 一种是通过 grpc.SendHeader(ctx,md),另外一种是 grpc.SetTrailer(ctx,md)

疑问 既然可以通过 SendHeader 发送元数据,为什么还需要通过 SetTrailer 发送呢?这两个的区别和联系是什么呢?

过程

首先,我们需要知道grpc通信模式分为四种

  1. 一元RPC模式
  2. 服务器流RPC模式
  3. 客户端流RPC模式
  4. 双向流RPC模式

然后,我们看 一元RPC模式双向流RPC模式 的区别

一元RPC模式通过一发一收模式

客户端消息由 头部-内容1-EOS 构成,服务端消息由 头部-内容1-trailer 构成

image.png

双向流RPC模式通过多发多收模式

客户端消息由 头部-内容3-内容1-内容2-EOS 构成,
服务端消息由 头部-内容1-内容2-内容3-trailer

image.png

结论

header和trailer的接收时机不同,可以看出,在一元模式中,header和trailer是一起到达客户端的,此时客户端从header或者trailer中获取 metadata 是一样的,但是在流模式中,header是先到达,然后接收多个stream内容,最后才获取到trailer,获取的时机是不一样的,所以 grpc 提供了两种方式让我们发送 metadata

这个问题是在看 gRPC与云原生应用开发 其中的发送元数据的章节中发现的,并通过google一下找到了比较满意的回答,记录一下过程,希望可以解决同样有疑问的你!

参考资料

gRPC与云原生应用开发

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值