如何在Python Tornado websocket_connect方法中指定子协议参数?

时间:2017-02-15 14:13:53

标签: python tornado

我想使用Python Tornado使用特定的子协议连接到websocket服务器(让我们称之为“mySubProtocol”)。我不知道如何使用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

1 个答案:

答案 0 :(得分:0)

实际上只是发现了怎么做并且想让你知道。您必须首先创建一个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