登录
首页 >  Golang >  Go问答

在 gRPC 调用中如何传输原始二进制文件?

来源:stackoverflow

时间:2024-02-20 22:27:24 339浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《在 gRPC 调用中如何传输原始二进制文件?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我已经有了 protobuf 消息对象的原始二进制文件。

现在要进行 gRPC 调用,我需要对其进行解组并将消息对象发送到 gRPC 客户端(这将再次对同一对象进行编组),在此过程中会浪费延迟。

如何通过将二进制文件传递给客户端来避免这种情况?


解决方案


这可以使用自定义编解码器实现。 自定义编解码器可以定义为

type stubbedcodec struct{}

func (cb stubbedcodec) marshal(v interface{}) ([]byte, error) {
    return v.([]byte), nil
}

func (cb stubbedcodec) unmarshal(data []byte, v interface{}) error {
    ba, _ := v.([]byte)

    for index, byte := range data {
        ba[index] = byte
    }
    return nil
}

一旦我们有了这个,我们就可以将编解码器作为拨号选项传递

grpc.Dial(grpcServer, grpc.WithInsecure(), grpc.WithBlock(), grpc.WithDefaultCallOptions(grpc.ForceCodec(StubbedCodec{})))

这将强制 grpc 使用您的编解码器,它基本上不执行任何操作(如上面所定义)。

今天关于《在 gRPC 调用中如何传输原始二进制文件?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>