2016-10-13 2 views
-1

Ich habe einen WAMP-Server auf AWS mit dem folgenden CodePass-Daten zu 'OnJoin' einem WAMP-Server von einem externen Datei

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) 

und Twisted-Server mit dem folgenden Code,

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

Der verdrehte Server empfängt Daten von einer externen Quelle im JSON-Format. Dies wird in 'POST' geparst. Diese Daten müssen weiter an den WAMP-Server übertragen werden (innerhalb onJoin). Sowohl der WAMP- als auch der Tornado-Server laufen auf AWS. Der WAMP-Server veröffentlicht diese Daten dann für die abonnierten Benutzer. Ich kann die Daten nicht an onJoin weitergeben. Gibt es irgendeinen Weg? Oder sollte ich eine Art Bridge verwenden, um auf REST API in WAMP zuzugreifen? Ich möchte hauptsächlich die 'Daten' (im Dict-Format), die über die REST-API empfangen wurden, an alle abonnierten Benutzer über WAMP senden.

Vielen Dank für die Hilfe!

Antwort

0

Ich konnte dieses Problem mithilfe von ApplicationSessionFactory() beheben. Dies verwendet die vorhandene ApplicationSession und kann von außerhalb der ApplicationSession-Funktion aufgerufen werden.

Verwandte Themen