我有少量的Rpyc服务器,它们仅部分具有相同的公开功能。
在客户端上,事件应转发到已连接并对特定事件感兴趣的所有服务器。
我想从服务器连接对象中获取服务器上可用的公开功能列表。
到目前为止,我发现最好的事情是使用方法名称(例如)在客户端中检查现有的公开函数。
try:
conn.root.exposed_recordLog
except Exception as e:
print(f"recordLog is not exposed: {str(e)}")
这会在客户端中引发AttributeError异常-但是,这也会引发我要避免的远程服务器上的异常。
考虑在每台服务器上添加一个通用的'exposed_supportedFunctions'函数,并返回其暴露函数的列表,但这看起来有些矫kill过正,容易出现不匹配的情况。
答案 0 :(得分:1)
我所做的就是添加此服务
def exposed_get_methods(self):
service_index = dir(self)
exposed_methods = [x.replace('exposed_', '') for x in service_index if x.startswith('exposed_')]
return exposed_methods
答案 1 :(得分:1)
您可以通过获取连接对象的属性来实现。在Python 3.7上进行了测试。
c = rpyc.connect_by_service('myservice')
exposed_methods = [ x[8:] for x in dir(c.root) if x.startswith('exposed_') and callable(getattr(c.root, x)) ]