問題: クライアントが http 要求を送信します。その HTTP 要求に対して、tornado サーバーが外部サーバーへの websocket 接続を開き、時間の経過とともにデータを取得するようにします (データベースに保存する必要があるデータ)。また、トルネード サーバーへの複数のユーザー リクエストを処理できる必要もあります。
これが私の実装です
from twisted.internet import reactor
from autobahn.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWS
from tornado.options import define, options, parse_command_line
class IndexHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
self.write("This is your response")
factory = WebSocketClientFactory("ws://localhost:7096")
factory.protocol = BridgeSocket
connectWS(factory)
self.finish()
reactor.run()
そして、これが私のソケット接続クラスです:
class BridgeSocket(WebSocketClientProtocol):
def sendHello(self):
self.sendMessage("rails")
def onOpen(self):
self.sendHello()
def onMessage(self, msg, binary):
print "Got echo: " + msg
def onClose(wasClean,code,reason):
print "GETTING CLOSE CONNECTION"
print str(wasClean)+" ---"+str(code)+"---"+str(reason)
reactor.stop()
ここで、reactor.run() は Tornado Web サーバーへのそれ以上の http 要求を防止するため、websocket の作業が完了して閉じられるとすぐに、reactor.stop() を試しました。しかし、原子炉を再起動することはできないことがわかりました。
アプローチのより良い代替手段や、私が見逃している可能性のあるものはありますか..