如何将参数传递给Tornado的WebSocketHandler类?

Lea*_*far 5 python tornado

在Tornado中my_object初始化WebSocketHandler实例时,我尝试将实例作为参数传递,以便在通信期间使用它。我尝试执行以下操作,但没有成功。

class WSWebHandler(tornado.websocket.WebSocketHandler):
    def __init__(self, my_object):
        super(tornado.websocket.WebSocketHandler, self).__init__()
        self.my_object = my_object

    def open(self):
        print('new connection')

    def on_message(self, message):
        print('message received: %s' % message)

    def on_close(self):
        print('connection closed')

    def check_origin(self, origin):
        return True

my_object = new My_Object()

application = tornado.web.Application([(r'/ws', WSWebHandler), my_object])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8080)
myIP = socket.gethostbyname(socket.gethostname())
print ('*** Websocket Server Started at %s***' % myIP)
tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

我猜错了什么吗?

提前致谢

xyr*_*res 9

龙卷风提供了一种不同的机制来将参数传递给处理程序。创建一个initialize在您的处理程序类中调用的方法。Tornado将使用您的自定义参数自动调用此方法:

class WSWebHandler(tornado.websocket.WebSocketHandler):
    def initialize(self, my_object):
        self.my_object = my_object
Run Code Online (Sandbox Code Playgroud)

您还错误地传递了参数。正确的方法是这样的:

tornado.web.Application(
    [
        (r'/ws', WSWebHandler, {'my_object': my_object}),
       # \____/  \__________/  \______________________/
       #   url      handler       dict of extra args

    ],
)
Run Code Online (Sandbox Code Playgroud)