我想使用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
答案 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