想要實現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連接實現一樣。