grpc - grpc-go 中的 session 和远程 IP 地址

标签 grpc grpc-go

在grpc-go中,实现服务时,服务接口(interface)定义的方法只包含ContextRequest。从Context的来源来看,它很简单

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

    Done() <-chan struct{}

    Err() error

    Value(key interface{}) interface{}
}

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

谢谢。

最佳答案

gRPC(以任何语言)都没有提供任何作为跨请求的 session 系统特别健壮的东西。

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

如果您需要跨单独的 RPC(或跨机器)的状态,您需要添加自己的 session 层。您可以通过创建一些唯一的 ID 来实现此目的,并在发送请求时将其附加到(例如)“my-session-id”元数据元素。

关于grpc - grpc-go 中的 session 和远程 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33684570/

相关文章:

java - Gradle 无法检测到 osdetector 插件

go - protoc-gen-go struct xxx 隐蔽到 map[string]interface{}

go - gRPC 客户端流控制如何在 go 中工作?

c# - 为什么 IServerStreamWriter 不发送通知响应?

Docker compose找不到本地包

protocol-buffers - golang grpc protobuf 堆栈是否有投影/过滤器支持?

go - 如何解码被拦截的gRPC请求/响应以查看golang中已发送/已接收的protobuf消息?

go - 使用 google.protobuf.Timestamp 在 Go 中解析具有时区偏移的日期时间戳

https - 在 .Net 5 : UntrustedRoot 下使用 HTTPS 调用 gRPC 服务的证书错误

c# - 从 .netcore 应用程序运行时,GRPC Init 抛出 "IOException: Failed to bind port "