问题:客户端发送一个 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()
这是我的 Socket 连接类:
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()。但是现在我发现重启反应堆是不可能的。
有没有更好的替代方法或我可能遗漏的任何东西..