Skip to content

websocket connection resets every two minutes #471

@jepessen

Description

@jepessen

I've the following class for retrieving data from websocket and convert them in a format usable by my program:

from curses import cbreak
import cbpro
import logging
import schedule
import time
import sys

# Setting log
log_formatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s]  %(message)s")
root_logger = logging.getLogger()
file_handler = logging.FileHandler("cbpro.log")
file_handler.setFormatter(log_formatter)
root_logger.addHandler(file_handler)

console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(log_formatter)
root_logger.addHandler(console_handler)
root_logger.setLevel(logging.DEBUG)

class CBProFeed(cbpro.WebsocketClient):
  def __init__(self):
    cbpro.WebsocketClient.__init__(self)
    self.public_client = cbpro.PublicClient()
    self.main_currency = 'EUR'
    self.crypto_currencies = ['AUCTION']
    self.products = ['AUCTION-EUR']

  def on_open(self):
    self.url = "wss://ws-feed.pro.coinbase.com/"
    self.channels=["ticker"]


  def on_message(self, msg):
    if 'price' in msg and 'type' in msg and msg['type'] == 'ticker':
      product_id = msg['product_id']
      price = float(msg['price'])
      volume = float(msg['volume_24h'])
      logging.info("Received " + product_id + ", Price is " + str(price) + ". Volume 24H is " + str(volume));

  def on_close(self):
    logging.info("Websocket connection closed")

  def run_forever(self):
    logging.info("Starting feed")
    schedule.every().minute.at(':00').do(self._handle_candle_callback)
    self.start()
    while True:
      schedule.run_pending()
      time.sleep(.1);
      if (self.error):
        logging.error("Connection closed. Error is " + str(self.error) + ". Restarting...")
        self.close()
        self.error = None
        self.start()

  def _handle_candle_callback(self):
    logging.debug("Minute processed")


feed = CBProFeed()
feed.run_forever()
logging.info("End of the script")

It works, except for the fact that the connection resets about every two minutes. This is the log when I run it:

...
2022-08-01 14:20:39,367 [MainThread  ] [INFO ]  Starting feed
2022-08-01 14:20:40,016 [Thread-1    ] [INFO ]  Received AUCTION-EUR, Price is 7.52. Volume 24H is 7511.306
2022-08-01 14:21:00,003 [MainThread  ] [DEBUG]  Running job Job(interval=1, unit=minutes, do=_handle_candle_callback, args=(), kwargs={})
2022-08-01 14:21:00,003 [MainThread  ] [DEBUG]  Minute processed
2022-08-01 14:22:00,023 [MainThread  ] [DEBUG]  Running job Job(interval=1, unit=minutes, do=_handle_candle_callback, args=(), kwargs={})
2022-08-01 14:22:00,023 [MainThread  ] [DEBUG]  Minute processed
Connection is already closed. - data: None
2022-08-01 14:22:20,089 [Thread-1    ] [INFO ]  Websocket connection closed
2022-08-01 14:22:20,147 [MainThread  ] [ERROR]  Connection closed. Error is Connection is already closed.. Restarting...
2022-08-01 14:22:20,829 [Thread-2    ] [INFO ]  Received AUCTION-EUR, Price is 7.52. Volume 24H is 7511.306
2022-08-01 14:22:34,593 [Thread-2    ] [INFO ]  Received AUCTION-EUR, Price is 7.53. Volume 24H is 7667.951
2022-08-01 14:22:41,850 [Thread-2    ] [INFO ]  Received AUCTION-EUR, Price is 7.53. Volume 24H is 7668.243
2022-08-01 14:22:46,204 [Thread-2    ] [INFO ]  Received AUCTION-EUR, Price is 7.54. Volume 24H is 7667.951
2022-08-01 14:22:46,247 [Thread-2    ] [INFO ]  Received AUCTION-EUR, Price is 7.55. Volume 24H is 7670.651
2022-08-01 14:22:46,798 [Thread-2    ] [INFO ]  Received AUCTION-EUR, Price is 7.56. Volume 24H is 7673.351
2022-08-01 14:22:46,996 [Thread-2    ] [INFO ]  Received AUCTION-EUR, Price is 7.57. Volume 24H is 7676.051
2022-08-01 14:23:00,014 [MainThread  ] [DEBUG]  Running job Job(interval=1, unit=minutes, do=_handle_candle_callback, args=(), kwargs={})
2022-08-01 14:23:00,015 [MainThread  ] [DEBUG]  Minute processed
2022-08-01 14:24:00,052 [MainThread  ] [DEBUG]  Running job Job(interval=1, unit=minutes, do=_handle_candle_callback, args=(), kwargs={})
2022-08-01 14:24:00,052 [MainThread  ] [DEBUG]  Minute processed
Connection is already closed. - data: None
2022-08-01 14:24:27,123 [Thread-2    ] [INFO ]  Websocket connection closed
2022-08-01 14:24:27,129 [MainThread  ] [ERROR]  Connection closed. Error is Connection is already closed.. Restarting...
2022-08-01 14:24:27,788 [Thread-3    ] [INFO ]  Received AUCTION-EUR, Price is 7.57. Volume 24H is 7679.043
...

That are logs that appear when on_close is called. What I'm doing wrong and how can solve the problem?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions