上下文的内容可以在grpc中传输吗?

时间:2018-10-16 06:52:14

标签: go grpc

我已经定义了客户端和服务器。它们都有一个ctx(上下文)作为参数,客户端和服务器通过grpc进行通信。

type Client interface {
    GetFileVersion(ctx context.Context, in *Req) (*Resp, error)
}

type client struct {
    cc *grpc.ClientConn
}

func (c *client) GetFileVersion(ctx context.Context, in *Req) (*Resp, error) {
    out := new(Resp)
    err := grpc.Invoke(ctx, "/testpb/GetFileVersion", in, out, c.cc, opts...)
    if err != nil {
        return nil, err
    }
    return out, nil
}



type Server interface {
    GetFileVersion(context.Context, *Req) (*Resp, error)
}

如果我在客户端的GetFileVersion的实现中在ctx中设置值,我可以在服务器中获得该值吗?

ctx = context.WithValue(parent, "test", 123)

1 个答案:

答案 0 :(得分:3)

context是用于全局 request 变量的通用注册表。不应逃避请求范围。考虑采用另一种方法。