Python 如何从协议外部发送Autobahn/Twisted WAMP消息?

Python 如何从协议外部发送Autobahn/Twisted WAMP消息?,python,twisted,autobahn,wamp-protocol,Python,Twisted,Autobahn,Wamp Protocol,以下是中的基本wamp pubsub示例: 此示例从类内发布消息: class Component(ApplicationSession): """ An application component that publishes an event every second. """ def __init__(self, realm = "realm1"): ApplicationSession.__init__(self) self._realm = rea

以下是中的基本wamp pubsub示例:

此示例从类内发布消息:

class Component(ApplicationSession):
   """
An application component that publishes an event every second.
"""

   def __init__(self, realm = "realm1"):
      ApplicationSession.__init__(self)
      self._realm = realm


   def onConnect(self):
      self.join(self._realm)


   @inlineCallbacks
   def onJoin(self, details):
      counter = 0
      while True:
         self.publish('com.myapp.topic1', counter)
         counter += 1
         yield sleep(1)
我想创建一个引用,以便通过此连接从代码中的其他位置发布消息,即
myobject.myconnection.publish('com.myapp.topic1','My message')

从这个类似的例子中,答案似乎是在连接时,我需要设置类似于
self.factory.myconnection=self
。我已经尝试过多次这种排列,但都没有成功

出厂设置部分如下所示:

   ## create a WAMP application session factory
   ##
   from autobahn.twisted.wamp import ApplicationSessionFactory
   session_factory = ApplicationSessionFactory()


   ## .. and set the session class on the factory
   ##
   session_factory.session = Component


   ## create a WAMP-over-WebSocket transport client factory
   ##
   from autobahn.twisted.websocket import WampWebSocketClientFactory
   transport_factory = WampWebSocketClientFactory(session_factory, args.wsurl, debug = args.debug)
   transport_factory.setProtocolOptions(failByDrop = False)


   ## start a WebSocket client from an endpoint
   ##
   client = clientFromString(reactor, args.websocket)
   client.connect(transport_factory)

我在课堂上设置的参考资料会附在哪里?到
客户端
?运输到工厂?当您的应用程序会话加入WAMP领域时,它会在应用程序会话工厂上设置对自身的引用,以
会话工厂

class MyAppComponent(ApplicationSession):

   ... snip

   def onJoin(self, details):
      if not self.factory._myAppSession:
         self.factory._myAppSession = self
然后,您可以从代码中的其他位置访问此会话,例如

   @inlineCallbacks
   def pub():
      counter = 0  
      while True:
         ## here we can access the app session that was created ..
         ##
         if session_factory._myAppSession:
            session_factory._myAppSession.publish('com.myapp.topic123', counter)
            print("published event", counter)
         else:
            print("no session")
         counter += 1
         yield sleep(1)

   pub()

感谢您添加一个“官方”示例。原来我的主要问题是我的程序试图在会话引用完全初始化之前访问它;移动或删除示例?在放弃之前,我一直在寻找类似于
session/fromoutside
的东西。