Я использую веб-сервер Tornado и хочу внутренне вызвать WebSocketHandler из RequestHandler.
Невозможно использовать функцию перенаправления /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 в качестве обработчика запросов?
Или, может быть, есть другой способ динамически изменить маршрутизацию моего приложения во время работы приложения? Если это так, я мог бы использовать этот способ для решения моей первоначальной задачи.