在使用 Autobahn 和 WAMP 之前,我一直在使用子类化方法,但偶然发现了装饰器/函数方法,我真的更喜欢子类化。
然而。我有一个从外部硬件(通过回调)调用的函数,该函数需要在被调用时发布到 Crossbar.io 路由器。
这就是我这样做的方式,在调用Session
之后保留对权利的引用。on_join -> async def joined(session, details)
from autobahn.asyncio.component import Component
from autobahn.asyncio.component import run
global_session = None
comp = Component(
transports=u"ws://localhost:8080/ws",
realm=u"realm1",
)
def callback_from_hardware(msg):
if global_session is None:
return
global_session.publish(u'com.someapp.somechannel', msg)
@comp.on_join
async def joined(session, details):
global global_session
global_session = session
print("session ready")
if __name__ == "__main__":
run([comp])
这种在组件加入连接后保持引用的方法感觉有点“奇怪”。对此有不同的方法吗?这可以通过其他方式完成。
如果不是这样的话,子类化和在该子类中包含所有应用程序依赖的代码感觉更“正确”(但是将我的应用程序的所有内容都保留在一个子类中也感觉很奇怪)。