如何将参数传递给 Tornado 的 WebSocketHandler class?
How to pass arguments to Tornado's WebSocketHandler class?
我试图在 Tornado 中初始化 WebSocketHandler
实例时将 my_object
的实例作为参数传递,因此我可以在通信期间使用它。我已尝试执行以下操作但没有成功。
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()
有没有猜错的地方?
提前致谢
1.传递局部参数
Tornado 提供了一种不同的机制来将参数传递给处理程序。在您的处理程序 class 中创建一个名为 initialize
的方法。 Tornado 将使用您的自定义参数自动调用此方法:
class WSWebHandler(tornado.websocket.WebSocketHandler):
def initialize(self, my_object):
self.my_object = my_object
您还错误地传递了参数。正确的做法是:
tornado.web.Application(
[
(r'/ws', WSWebHandler, {'my_object': my_object}),
# \____/ \__________/ \______________________/
# url handler dict of extra args
],
)
2。从 URL
传递参数
以上代码用于传递局部参数。您还可以将动态参数从 URL 传递到 websocket 处理程序,如下所示:
tornado.web.Application(
[
(r'/ws/(?P<id>[0-9])', WSWebHandler),
],
)
# Now the websocket handler's `open` method will accept
# a parameter called `id`
class WSWebHandler(tornado.websocket.WebSocketHandler):
def open(self, id):
# do something with id
pass
我试图在 Tornado 中初始化 WebSocketHandler
实例时将 my_object
的实例作为参数传递,因此我可以在通信期间使用它。我已尝试执行以下操作但没有成功。
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()
有没有猜错的地方?
提前致谢
1.传递局部参数
Tornado 提供了一种不同的机制来将参数传递给处理程序。在您的处理程序 class 中创建一个名为 initialize
的方法。 Tornado 将使用您的自定义参数自动调用此方法:
class WSWebHandler(tornado.websocket.WebSocketHandler):
def initialize(self, my_object):
self.my_object = my_object
您还错误地传递了参数。正确的做法是:
tornado.web.Application(
[
(r'/ws', WSWebHandler, {'my_object': my_object}),
# \____/ \__________/ \______________________/
# url handler dict of extra args
],
)
2。从 URL
传递参数以上代码用于传递局部参数。您还可以将动态参数从 URL 传递到 websocket 处理程序,如下所示:
tornado.web.Application(
[
(r'/ws/(?P<id>[0-9])', WSWebHandler),
],
)
# Now the websocket handler's `open` method will accept
# a parameter called `id`
class WSWebHandler(tornado.websocket.WebSocketHandler):
def open(self, id):
# do something with id
pass