【问题标题】:Session and remote IP address in grpc-gogrpc-go 中的会话和远程 IP 地址
【发布时间】:2016-02-14 13:15:15
【问题描述】:

在grpc-go中,实现服务时,服务接口定义的方法只包含ContextRequest。从Context的来源来看,就这么简单

type Context interface {
    Deadline() (deadline time.Time, ok bool)

    Done() <-chan struct{}

    Err() error

    Value(key interface{}) interface{}
}

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

谢谢。

【问题讨论】:

    标签: grpc grpc-go


    【解决方案1】:

    gRPC 提供的任何东西(任何语言)都不会作为跨请求的会话系统特别健壮。

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

    如果您需要跨不同 RPC(或跨机器)的状态,您需要添加自己的会话层。您可以通过在发送请求时创建一些附加到(例如)“my-session-id”元数据元素的唯一 ID 来做到这一点。

    【讨论】:

    • 不是已经有一个与频道关联的唯一 ID,不是吗?如果我需要强制我的客户在创建频道时附加一个 uid 元数据,我会这样做。但是如果grpc已经内置了这样的uid,那就更可取了。谢谢
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2022-08-04
      • 2021-11-27
      相关资源
      最近更新 更多