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

标签 python tornado

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

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 提供了一种不同的机制来将参数传递给处理程序。创建一个名为 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

关于python - 如何将参数传递给 Tornado 的 WebSocketHandler 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49627836/

相关文章:

python - Spacemacs python层: Invalid version syntax

python - 用 Pandas 迭代合并数据框

python - 将常量元组值添加到元组列表

javascript - 我可以在Python中通过tornado websocket发送gzip压缩数据吗?

python - 托管 Tornado /websocket 应用程序

python - 我将如何使用 Python Tornado 通过 HTTP 实现 "tail"?

python - 在 WTForms 中使用 FieldList、FormField 和 populate_obj 填充列表,并在客户端添加项目

python - 尝试登录已登录的应用程序 Django 时 CSRF 验证失败

python - Tornado 重定向到带参数的页面

Python + Tornado 编辑文件后重启