用python实现websocket请求遇到的问题及解决方法。
想要实现python的ws库功能,实时获取对方服务器ws协议返回的数据,查了下百度,用如下流程:
ws = create_connection("wss://ws.xxxxxxx.info/inv") ws.send(str({"op":"unconfirmed_sub"})) print("Receiving...") result = ws.recv() print(str(result))
看文档需要发送一个指令,用 str({"op":"unconfirmed_sub"}),发现无回显。经过大牛提示,不能用str方法,用json.dumps()方法。
加载json库 import json
ws = create_connection("wss://ws.xxxxxxx.info/inv") ws.send(json.dumps({"op":"unconfirmed_sub"})) print("Receiving...") result = ws.recv() print(str(result))
ok,收到单条消息。假如要循环接受呢?简单
while(1): result = ws.recv() print(str(result))
但是,运行一段时间出现 连接中断,需要重连,重连后漏掉许多数据,很是烦恼。网上查找没有明确的解决方式,试着竟然找到一个解决方式。
websocket.enableTrace(True) ws = websocket.WebSocketApp( "wss://ws.xxxxxx.info/inv", on_message = on_message, on_error = on_error, on_close = on_close ) ws.on_open = on_open ws.run_forever()
python的仿js websocket写法方式,重新写了一遍脚本,流畅接受消息,自动重连发送指令,连接时间明显减少,基本做到无遗漏数据,与网站js的ws连接实现一样。