将数据从外部文件传递到 WAMP 服务器的 'onJoin'

Pass data to 'onJoin' of a WAMP server from external file

我在 AWS 上有一个 WAMP 服务器,代码如下

from os import environ
from twisted.internet.defer import inlineCallbacks
from twisted.internet.task import LoopingCall
from autobahn import wamp
from autobahn.twisted.wamp import ApplicationSession, ApplicationRunner, ApplicationSessionFactory

class wampserver(ApplicationSession):

    @inlineCallbacks
    def onJoin(self, details):
        yield self.register(self)
        print("Server started")

        def heartbeat():
            self.publish(u'com.myapp.wampserver.heartbeat', 'heartbeat')
        LoopingCall(heartbeat).start(2)

        def contcmd():
            print 'container'
            #Get the value from Tornado server
            return self.publish(u'com.myapp.wampserver.contcmd', #pass the data (dict format))

if __name__ == '__main__':
    runner = ApplicationRunner(
        environ.get("AUTOBAHN_DEMO_ROUTER", u"ws://localhost:8096/ws"),
        u"realm1",
    )
    runner.run(wampserver)

和一个具有以下代码的 Twisted 服务器,

import tornado.escape
import tornado.ioloop
import tornado.web
import json

def handleCmd(entries):
   #pass this Dict (entries) to WAMP server
   for entry in entries:
        print entries[entry]

class handleReq(tornado.web.RequestHandler):
    def get(self):
        self.write('Edge Computing Project')

    def post(self, **kwargs):
        print "received"

        # parse the received data
        print self.request.body
        data = json.loads(self.request.body)
        print data

        for entry in data:
            if entry == 'command':
                print 'command'
                handleCmd(data)
        self.write(data)


application = tornado.web.Application([
    (r"/handle_request", handleReq)
])

if __name__ == "__main__":
    application.listen(8090)
    tornado.ioloop.IOLoop.instance().start()

twisted 服务器将从外部源接收 JSON 格式的数据。这在 'POST' 中被解析。此数据必须进一步传输到 WAMP 服务器(在 onJoin 内)。 WAMP 和 Tornado 服务器都在 AWS 上 运行。然后 WAMP 服务器将此数据发布给订阅用户。我无法将数据传递到 onJoin。到底有没有或者我应该使用某种桥来访问 WAMP 中的 REST API?我主要想通过 WAMP 将通过 REST API 收到的 'data'(dict 格式)发送给所有订阅用户。

感谢您的帮助!

我使用 ApplicationSessionFactory() 解决了这个问题。这将使用现有的 ApplicationSession 并且可以从 ApplicationSession 函数外部调用。