【发布时间】:2016-10-13 01:02:38
【问题描述】:
我在 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 接收到的“数据”(以字典格式)发送给所有订阅用户。
感谢您的帮助!
【问题讨论】:
标签: rest wamp tornado wampserver autobahn