问题: 客户端发送http请求。对于那个HTTP请求,我希望我的龙卷风服务器打开到外部服务器的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()。但现在我发现重启反应堆是不可能的。
对于这种方法或者我可能遗失的任何东西,还有更好的选择吗?
答案 0 :(得分:2)
如果要从 Tornado下的AutobahnPython 运行WebSocket客户端,则需要Twisted-Tornado集成(“Tworn on Tornado”) - 请参阅here。这在Tornado内运行Twisted反应器循环。