Передать данные в 'onJoin' сервера WAMP из внешнего файла

У меня есть сервер WAMP на AWS со следующим кодом

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()

Витой сервер будет получать данные из внешнего источника в формате JSON. Это анализируется в 'POST'. Эти данные должны быть переданы на сервер WAMP (внутри onJoin). Серверы WAMP и Tornado работают на AWS. Затем сервер WAMP публикует эти данные для подписавшихся пользователей. Я не могу передать данные в onJoin. Там в любом случае? Или я должен использовать какой-то мост для доступа к REST API в WAMP? В основном я хочу отправить "данные" (в формате dict), полученные через REST API, всем подписавшимся пользователям через WAMP.

Спасибо вам за помощь!

1 ответ

Решение

Мне удалось решить эту проблему с помощью ApplicationSessionFactory(). Это будет использовать существующий ApplicationSession и может быть вызван извне функции ApplicationSession.

Другие вопросы по тегам