binance-connector-python icon indicating copy to clipboard operation
binance-connector-python copied to clipboard

SSL connection error when starting large number of streams (100s)

Open mathematician02 opened this issue 1 year ago • 2 comments

Using latest version (Nov 2023), I'm trying to start kline streams on 100 symbols, but I get SSL error

How can I safely achieve that?

from binance.websocket.spot.websocket_api import SpotWebsocketAPIClient

def message_handler(_, message):
    logging.info(message)

my_client = SpotWebsocketAPIClient(on_message=message_handler)

my_client.ticker(symbol="BNBBUSD", type="FULL")

REPEAT ABOVE FOR 100 SYMBOLS:

File ~\code\crypto\src\crypto\exchange\binancelib\binance_sockets_connector.py:17, in start_kline_1m_sockets(symbols, msg_handler, action)
     15 for a_symbol in tqdm(symbols, desc=f"Subscribing to {len(symbols)} symbols kline streams"):
     16     time.sleep(0.05)
---> 17     my_client.kline(symbol=a_symbol, interval="1m", action=action)

File ~\venvs\cry\Lib\site-packages\binance_connector\websocket\spot\websocket_stream.py:95, in SpotWebsocketStreamClient.kline(self, symbol, interval, id, action)
     66 """Kline/Candlestick Streams
     67
     68 The Kline/Candlestick Stream push updates to the current klines/candlestick every second.
   (...)
     91 Update Speed: 2000ms
     92 """
     93 stream_name = "{}@kline_{}".format(symbol.lower(), interval)
---> 95 self.send_message_to_server(stream_name, action=action, id=id)

File ~\venvs\cry\Lib\site-packages\binance_connector\websocket\websocket_client.py:88, in BinanceWebsocketClient.send_message_to_server(self, message, action, id)
     85     id = get_timestamp()
     87 if action != self.ACTION_UNSUBSCRIBE:
---> 88     return self.subscribe(message, id=id)
     89 return self.unsubscribe(message, id=id)

File ~\venvs\cry\Lib\site-packages\binance_connector\websocket\websocket_client.py:97, in BinanceWebsocketClient.subscribe(self, stream, id)
     95     stream = [stream]
     96 json_msg = json.dumps({"method": "SUBSCRIBE", "params": stream, "id": id})
---> 97 self.socket_manager.send_message(json_msg)

File ~\venvs\cry\Lib\site-packages\binance_connector\websocket\binance_socket_manager.py:64, in BinanceSocketManager.send_message(self, message)
     62 def send_message(self, message):
     63     self.logger.debug("Sending message to Binance WebSocket Server: %s", message)
---> 64     self.ws.send(message)

File ~\venvs\cry\Lib\site-packages\websocket\_core.py:285, in WebSocket.send(self, payload, opcode)
    271 """
    272 Send the data as string.
    273
   (...)
    281     Operation code (opcode) to send.
    282 """
    284 frame = ABNF.create_frame(payload, opcode)
--> 285 return self.send_frame(frame)

File ~\venvs\cry\Lib\site-packages\websocket\_core.py:313, in WebSocket.send_frame(self, frame)
    311 with self.lock:
    312     while data:
--> 313         l = self._send(data)
    314         data = data[l:]
    316 return length

File ~\venvs\cry\Lib\site-packages\websocket\_core.py:527, in WebSocket._send(self, data)
    526 def _send(self, data: Union[str, bytes]):
--> 527     return send(self.sock, data)

File ~\venvs\cry\Lib\site-packages\websocket\_socket.py:172, in send(sock, data)
    170         return sock.send(data)
    171     else:
--> 172         return _send()
    173 except socket.timeout as e:
    174     message = extract_err_message(e)

File ~\venvs\cry\Lib\site-packages\websocket\_socket.py:149, in send.<locals>._send()
    147 def _send():
    148     try:
--> 149         return sock.send(data)
    150     except SSLWantWriteError:
    151         pass

File ~\AppData\Local\Programs\Python\Python311\Lib\ssl.py:1243, in SSLSocket.send(self, data, flags)
   1239     if flags != 0:
   1240         raise ValueError(
   1241             "non-zero flags not allowed in calls to send() on %s" %
   1242             self.__class__)
-> 1243     return self._sslobj.write(data)
   1244 else:
   1245     return super().send(data, flags)

SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2427)

mathematician02 avatar Nov 22 '23 22:11 mathematician02