是否可以使用 Go net/rpc 检查元数据?

Posted

技术标签:

【中文标题】是否可以使用 Go net/rpc 检查元数据?【英文标题】:Is it possible to inspect metadata with Go net/rpc? 【发布时间】:2018-07-20 18:03:56 【问题描述】:

Go 中的 RPC 服务器示例通常看起来像这样(来自https://golang.org/pkg/net/rpc/):

arith := new(Arith)
rpc.Register(arith)
rpc.HandleHTTP()
l, e := net.Listen("tcp", ":1234")
if e != nil 
    log.Fatal("listen error:", e)

go http.Serve(l, nil)

在传递给注册函数之前,是否可以检查与连接关联的元数据?我想先根据 ACL 检查客户端 IP、API 密钥和请求的函数。

编辑添加:我意识到可以使用l.RemoteAddr() 从侦听器获取远程地址 - 目前尚不清楚我将如何获取 API 密钥和请求的函数。

进入函数后,我可以获取 API 密钥,但不能获取客户端 IP。在函数内部执行它不太理想,因为 ACL 检查样板必须进入每个函数。

【问题讨论】:

【参考方案1】:

遗憾的是,我已经确定如果不分叉 net/rpc 并为其添加上下文功能,这是不可能的。

将上下文传递给注册函数似乎是一个常见的功能请求;但是,根据https://golang.org/pkg/net/rpc/,“net/rpc 包已冻结,不接受新功能。”

【讨论】:

以上是关于是否可以使用 Go net/rpc 检查元数据?的主要内容,如果未能解决你的问题,请参考以下文章

WCF调试错误:添加服务失败。服务元数据可能无法访问。请确保服务正在运行并且正在公开元数据。

Firebase 存储安全规则:检查是不是存在另一个对象/检查对象的元数据

是否有元数据表来检查 BigQuery 中的表是否已分区?

如何检查元数据是不是为空

WCF 服务主机找不到任何服务元数据。请检查元数据是不是启用

可以从 Firestore 快照 Flutter 中获取元数据吗?