簡體   English   中英

Websocket 斷開連接

[英]Websocket Disconnection

我正在使用 python websocket-client 訂閱 kraken 交換 websocket。 系統最初可以正常運行一兩天,但隨后開始面臨與 cloudflare 的斷開連接並出現錯誤

GET / HTTP/1.1
Upgrade: websocket
Host: ws.kraken.com
Origin: http://ws.kraken.com
***

and after many reattempts by the system websockets gives the error
*** error from callback <function on_close at 0x000001F33E2CBAC0>: maximum recursion depth exceeded while calling a Python object

我的實現

def on_close(ws, close_status_code, close_msg):
    log.info("Connection Closed:" + str(close_status_code)+" " + str(close_msg))
    print("Connection Closed:" + str(close_status_code)+" " + str(close_msg))
    print("Retry : %s" % time.ctime())
    time.sleep(10)
    print("restarting bot")
    connect_websocket()  # retry per 10 seconds


def on_open(ws):
    # print(symbol)
    print('connection established')

    string = {"event": "subscribe", "pair": ["ADA/USD", "BCH/USD", "DOT/USD", "ENJ/USD", "ETC/USD", "ETH/USD", "FIL/USD", "GNO/USD", "KSM/USD", "LTC/USD", "OMG/USD", "SC/USD", "SOL/USD", "DOGE/USD", "XRP/USD", "SHIB/USD", "AXS/USD", "BAL/USD", "COMP/USD", "CRV/USD", "CQT/USD", "DASH/USD", "EOS/USD", "EWT/USD", "GHST/USD", "GRT/USD", "KAR/USD", "LINK/USD", "LPT/USD", "LSK/USD", "MANA/USD", "MINA/USD", "MOVR/USD", "OXT/USD", "QTUM/USD", "SAND/USD", "TRX/USD", "XLM/USD", "XMR/USD", "ZEC/USD", "BTC/USD"], "subscription": {"interval": 240, "name": "ohlc"}}
    ws.send(json.dumps(string))


def on_message(ws, message):
    print(message)
    message = json.loads(message, parse_float=decimal)
    try:
       if message["event"] == 'heartbeat':
        return
    except:
        log.info(message)



def connect_websocket(): ## TO CONNECT TO WEBSOCKET, CALL ON EACH bot restart command
    websocket.enableTrace(True, log)
    global ws

    ws = websocket.WebSocketApp("wss://ws.kraken.com/", on_open=on_open,
                                                        on_close=on_close,
                                                        on_message = on_message)
    print("symbol  timeframe ", str(240))
    ws.run_forever()

在腳本的開頭試試這個,對我有用

import gevent.monkey
gevent.monkey.patch_all()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM