Передать данные в '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.