hprose / hprose-golang

Hprose is a cross-language RPC. This project is Hprose for Golang.
MIT License
1.26k stars 205 forks source link

如何在invokeHandler中获取 service 名称? #85

Closed ideamean closed 5 years ago

ideamean commented 5 years ago

server.AddInstanceMethods(&serviceA) server.AddInstanceMethods(&serviceB) server.AddInvokeHandler(InvokeHandler)

如上,在InvokeHandler中 func InvokeHandler(name string, args []reflect.Value, context rpc.Context, next rpc.NextInvokeHandler) (results []reflect.Value, err error) name是调用的serviceA或serviceB中的方法名,如何获取这个name是属于哪个 service的调用?

andot commented 5 years ago

将 context 转换成 rpc.ServiceContext 对象,然后通过 Method 方法可以得到 Method 对象。

ideamean commented 5 years ago

ideamean commented 5 years ago

如果是这样:server.AddInstanceMethods(&serviceA), 调用serviceA.func1() 在InvokeHandler中,name目前是func1, 如何再拿到serviceA这个字符串?

andot commented 5 years ago

Method 方法得到的 Method 对象有个 Function 属性。该属性是 reflect.Value 类型的,所以,该函数上的所有东西你都可以反射出来。