我正在使用 Tornado Webserver 并希望从 RequestHandler 内部调用 WebSocketHandler。
无法使用重定向 /redirectHandler 功能,因为要调用的 WebSocketHandler 类(下例中的“IndexHandlerDynamic1”)将使用 classFactory 创建。
使用 Requesthandler 的定义(此处),我的示例如下所示:
class IndexHandlerDynamic1(tornado.web.WebSocketHandler):
def initialize(self):
print "Forwarded to Websocket"
def open(self):
print "WebSocket opened"
class IndexHandlerDistributor(tornado.web.RequestHandler):
def get(self, channelId):
IndexHandlerDynamic1(self.application, self.request)
如果我请求相关的 url,他会跳转到 IndexHandlerDistributor 并调用 IndexHandlerDynamic1.initialize()。
但在客户端浏览器控制台输出以下错误:
Error during WebSocket handshake: Unexpected response code: 200
显然套接字连接没有正确打开,我的错误是什么?
编辑:
感谢本的帮助!
可悲的是,我仍然无法将用户路由到名为 url 参数的动态创建的类。我希望您可以通过查看我的示例来理解我的问题:
app = tornado.web.Application(
[(r"/", IndexHandler)] +
[(r"/channel/(?P<channelId>[^\/]+)?", ClassFactory(channelId))]
)
如何使用 channelId 作为我调用 ClassFactory 作为 Requesthandler 的参数?
或者是否有另一种方法可以在应用程序运行时动态更改我的应用程序的路由?如果是这样,我可以使用这种方式来解决我的初始任务。