rpyc-如何获取连接的公开功能列表

时间:2018-11-08 13:18:45

标签: python rpyc

我有少量的Rpyc服务器,它们仅部分具有相同的公开功能。

在客户端上,事件应转发到已连接并对特定事件感兴趣的所有服务器。

我想从服务器连接对象中获取服务器上可用的公开功能列表。

到目前为止,我发现最好的事情是使用方法名称(例如)在客户端中检查现有的公开函数。

try:
    conn.root.exposed_recordLog
except Exception as e:
    print(f"recordLog is not exposed: {str(e)}")

这会在客户端中引发AttributeError异常-但是,这也会引发我要避免的远程服务器上的异常。

考虑在每台服务器上添加一个通用的'exposed_supportedFunctions'函数,并返回其暴露函数的列表,但这看起来有些矫kill过正,容易出现不匹配的情况。

2 个答案:

答案 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)) ]