grpc-go

时间:2015-11-13 01:37:24

标签: grpc grpc-go

在grpc-go中,实现服务时,服务接口定义的方法仅包含ContextRequest。从Context的来源,它就像

一样简单
type Context interface {
    Deadline() (deadline time.Time, ok bool)

    Done() <-chan struct{}

    Err() error

    Value(key interface{}) interface{}
}

所以我想知道是否有可能获得一些元数据(包括远程IP地址和其他数据)以维持会话。

感谢。

2 个答案:

答案 0 :(得分:3)

gRPC没有提供(在任何语言中)作为跨请求的会话系统特别健壮。

当您需要在客户端的单个服务器上维护上下文时,流机制很棒:流回调的堆栈可以指向您需要的任何会话信息。

如果您需要在单独的RPC(或跨机器)上建立状态,则需要添加自己的会话层。您可以通过创建一些在发送请求时附加到(例如)“my-session-id”元数据元素的唯一ID来执行此操作。

答案 1 :(得分:0)

可以通过使用stats.Handler(尤其是此结构https://github.com/grpc/grpc-go/blob/v1.20.x/stats/stats.go#L89)来检索远程IP地址。

grpc.Metadata通常用于存储有关会话的任意信息。