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检查样板必须在每个函数中使用。
答案 0 :(得分:0)
很遗憾,我已经确定,如果不派发net / rpc并为其添加上下文功能,这是不可能的。
将上下文传递给已注册的功能似乎是一项常见功能请求;但是,根据https://golang.org/pkg/net/rpc/,“ net / rpc软件包已冻结,并且不接受新功能。”