【问题标题】:How to specify a subprotocol parameter in Python Tornado websocket_connect method?如何在 Python Tornado websocket_connect 方法中指定子协议参数?
【发布时间】:2017-02-15 14:13:52
【问题描述】:

我想使用 Python Tornado 使用特定的子协议(我们称之为“mySubProtocol”)连接到 websocket 服务器。我不知道如何使用websocket_connect 方法来做到这一点。它的方法签名是:

def websocket_connect(url, io_loop=None, callback=None, connect_timeout=None, on_message_callback=None, compression_options=None)

现在出于测试目的,我使用了一个名为“Dark WebSocket Terminal”的工具,我可以简单地将子协议指定为 URL 后面的参数,如下所示

/connect ws://10.1.45.195:8081/resource mySubProtocol

在 Tornado 中,我尝试在 URL 除以 websocket_connect 方法的 URL 参数中的空格后添加 subprotocol 参数,但这会导致错误的请求异常。

connection = tornado.websocket.websocket_connect(url="ws://10.1.45.195:8081/resource mySubProtocol", callback=self.onConnected, connect_timeout=30)

在连接请求中定义子协议对我来说似乎是一项常见的任务,但是我发现这方面的信息很少。任何帮助是极大的赞赏。 亲切的问候,blomquist

【问题讨论】:

    标签: python tornado


    【解决方案1】:

    实际上只是发现了如何做到这一点,并想让你知道。您必须先创建一个 http 标头对象和一个 http 请求对象,如下所示:

    headers = httputil.HTTPHeaders({'Sec-WebSocket-Protocol': 'mySubProtocol'})
    request = httpclient.HTTPRequest(url="ws://10.1.45.195:8081/resource", headers=headers)
    connection = tornado.websocket.websocket_connect(url=request, callback=self.onConnected)
    

    这就是诀窍。干杯,blomquist

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多