Проблема состоит в том, чтобы найти простой способ подписки на несколько каналов с использованием одного websocket
соединения в python
.
Проблема очень проста, и существует несколько решений, однако большинство из них используют partial
, и мы хотели бы ее избежать.
Ниже приведен пример отдельной подписки subscribe_message_1
, и мы также хотели бы подписаться subscribe_message_2
. Чтобы упростить задачу, приведем реальный пример с использованием kraken.
import sys
import json
import signal
from websocket import create_connection
def alarmfunction(signalnumber, frame):
signal.alarm(1)
def open_channel(ws, subscribe_message):
try:
ws.send(subscribe_message)
except Exception as error:
print("Feed subscription failed (%s)" % error)
ws.close()
sys.exit(1)
while True:
api_data = ws.recv()
api_data = json.loads(api_data)
print(type(api_data))
print(api_data)
ws.close()
sys.exit(1)
signal.signal(signal.SIGALRM, alarmfunction)
api_feed = "book"
api_symbol = "ETH/USD".upper() #sys.argv[1].upper()
api_symbol2 = "LTC/USD".upper() #sys.argv[1].upper()
api_depth = 10 #sys.argv[2]
api_domain = "wss://ws.kraken.com/"
api_book = {"bid":{}, "ask":{}}
try:
ws = create_connection(api_domain)
except Exception as error:
print("WebSocket connection failed (%s)" % error)
sys.exit(1)
subscribe_message_1 = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "depth":%(depth)s}, "pair":["%(symbol)s"]}' % {"feed":api_feed, "depth":api_depth, "symbol":api_symbol}
subscribe_message_2 = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "depth":%(depth)s}, "pair":["%(symbol)s"]}' % {"feed":api_feed, "depth":api_depth, "symbol":api_symbol2}
open_channel(ws, subscribe_message_1)