Tornado Webserver を使用しており、RequestHandler から WebSocketHandler を内部的に呼び出したいと考えています。
呼び出す WebSocketHandler クラス (以下の例では「IndexHandlerDynamic1」) が classFactory で作成されるため、リダイレクト /redirectHandler 機能を使用することはできません。
Requesthandler ( here ) の定義を使用すると、私の例は次のようになります。
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))]
)
Requesthandler としての ClassFactory の呼び出しのパラメーターとして channelId を使用する方法は?
または、アプリケーションの実行中にアプリケーションのルーティングを動的に変更する別の方法がありますか? もしそうなら、私はこの方法を使用して最初のタスクを解決できます。