调用Requesthand中的Tornado WebSocketHandler

2024-10-02 12:33:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Tornado Webserver,希望从RequestHandler内部调用WebSocketHandler。在

不可能使用redirect/redirectHandler功能,因为要调用的WebSocketHandler类(在下面的示例中为IndexHandlerDynamic1”)将使用classFactory创建。在

使用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()。在

但在客户端,浏览器控制台输出以下错误:

^{pr2}$

显然套接字连接没有正确打开,我的错误是什么?在

编辑:

感谢本的帮助!在

遗憾的是,我仍然难以将用户路由到一个动态创建的类,该类名为url参数。我希望你能通过看我的例子来理解我的问题:

app = tornado.web.Application( 
        [(r"/", IndexHandler)] + 
        [(r"/channel/(?P<channelId>[^\/]+)?", ClassFactory(channelId))] 
        ) 

如何使用channelId作为参数调用ClassFactory作为Requesthandler?在

或者,是否有其他方法可以在应用程序运行时动态更改应用程序的路由?如果是这样的话,我可以用这种方法来解决我最初的任务。在


Tags: selfweburl示例deftornadoclassprint
1条回答
网友
1楼 · 发布于 2024-10-02 12:33:55

问题是您将两个requesthandler附加到同一个请求。我不确定动态创建处理程序类是否是一个好主意,但是如果您想这样做,只需将您的工厂函数(它本身不是RequestHandler)传递到url路由表。路由表不一定需要RequestHandler子类,它只需要一个可以用(app, request)调用并返回RequestHandler实例的对象。在

相关问题 更多 >

    热门问题