gpt4 book ai didi

python - 使用 Autobahn/Twisted 在 Tornado HTTP Handler 中建立 websocket 连接

转载 作者:行者123 更新时间:2023-11-28 17:44:01 24 4
gpt4 key购买 nike

问题:客户端发送一个http请求。对于那个 HTTP 请求,我希望我的 Tornado 服务器打开一个到外部服务器的 websocket 连接并超时获取一些数据。(我需要将这些数据存储在数据库中)。我还需要能够处理对 Tornado 服务器的多个用户请求。

这是我的实现

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 网络服务器的进一步 http 请求,所以我在 websocket 工作完成并关闭后立即尝试了 reactor.stop() 。但是现在我发现重启reactor是不可能的。

是否有更好的替代方法或我可能遗漏的任何东西..

最佳答案

如果您想从 Tornado 下的 AutobahnPython 运行 WebSocket 客户端,您需要 Twisted-Tornado 集成(“Twisted on Tornado”)- 参见 here .这会在 Tornado 中运行一个 Twisted react 器循环。

关于python - 使用 Autobahn/Twisted 在 Tornado HTTP Handler 中建立 websocket 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20657935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com