py-graphql-client icon indicating copy to clipboard operation
py-graphql-client copied to clipboard

Connection crashes when Websocket connection closed by server

Open kdowney-cloudwallcapital opened this issue 3 years ago • 1 comments

If there is an open subscription the client should automatically retry / reconnect, maybe with an exponential backoff. I have found the tenacity package helpful for this in the past.

Exception has occurred: WebSocketConnectionClosedException
Connection is already closed.
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/websocket/_socket.py", line 93, in recv
    raise WebSocketConnectionClosedException(
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/websocket/_core.py", line 449, in _recv
    return recv(self.sock, bufsize)
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/websocket/_abnf.py", line 396, in recv_strict
    bytes_ = self.recv(min(16384, shortage))
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/websocket/_abnf.py", line 309, in recv_header
    header = self.recv_strict(2)
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/websocket/_abnf.py", line 361, in recv_frame
    self.recv_header()
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/websocket/_core.py", line 374, in recv_frame
    return self.frame_buffer.recv_frame()
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/websocket/_core.py", line 340, in recv_data_frame
    frame = self.recv_frame()
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/websocket/_core.py", line 327, in recv_data
    opcode, frame = self.recv_data_frame(control_frame)
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/websocket/_core.py", line 310, in recv
    opcode, data = self.recv_data()
  File "/workspaces/serenity.core/venv/lib/python3.8/site-packages/graphql_client/__init__.py", line 85, in _receiver_task
    res = self._connection.recv()
  File "/usr/local/python/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/python/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/usr/local/python/lib/python3.8/threading.py", line 890, in _bootstrap
    self._bootstrap_inner()

I'm having similar issues. After a day or so, sometimes the server resets the connection, but there doesn't seem to be a way to cleanly restore/retry the connection.

File "/root/.local/lib/python3.9/site-packages/websocket/_socket.py", line 81, in recv
    bytes_ = sock.recv(bufsize)
  File "/usr/local/lib/python3.9/ssl.py", line 1227, in recv
    return self.read(buflen)
  File "/usr/local/lib/python3.9/ssl.py", line 1102, in read
    return self._sslobj.read(len)
ConnectionResetError: [Errno 104] Connection reset by peer

Using the stock example from the README.

Any hints on how to try/except this or another fail safe method that keeps the connection alive?

sderuiter avatar Jul 05 '22 16:07 sderuiter

I fixed it in pull request #37 , you can use my fork till is not merged https://github.com/AleMuzzi/py-graphql-client

AleMuzzi avatar Mar 01 '23 11:03 AleMuzzi

Thanks for reporting. And thanks to @AleMuzzi for fixing it. It is now released in 0.1.2. Please upgrade your package to get the fixed version pip install py-graphql-client==0.1.2.

ecthiender avatar May 27 '23 13:05 ecthiender