Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

websockets.exceptions.ConnectionClosedError: no close frame received or sent #196

Open
hsh4269 opened this issue Feb 20, 2024 · 6 comments

Comments

@hsh4269
Copy link

hsh4269 commented Feb 20, 2024

Hi, I am a beginner.
I'm asking because an error occurred randomly when connecting to the web socket.
The error message is
"websockets.exceptions.ConnectionClosedError: no close frame received or sent"

Bybit's API document recommends sending Heartbeat Packet every 20 seconds to maintain a websocket connection.

Like this
ws.send(JSON.stringify({"req_id": "100001", "op": "ping"}));

It looks like this, but I don't think that part is working.
How do I do Heartbeat Packet to maintain a websocket connection in pybit?

@dextertd
Copy link
Collaborator

You don't need to take any proactive measure to send a heartbeat packet with pybit. It does it for you.

The code you mention is for javascript, not python.

@hsh4269
Copy link
Author

hsh4269 commented Mar 25, 2024

So...... why does this happen?

@dextertd
Copy link
Collaborator

I'm not able to reproduce this, can you send the code you used?

@hsh4269
Copy link
Author

hsh4269 commented Apr 30, 2024

Process WebSocketManager-4:1:
Traceback (most recent call last):
File "C:\Users\HSH\AppData\Roaming\Python\Python311\site-packages\websockets\legacy\protocol.py", line 974, in transfer_data
message = await self.read_message()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\HSH\AppData\Roaming\Python\Python311\site-packages\websockets\legacy\protocol.py", line 1044, in read_message
frame = await self.read_data_frame(max_size=self.max_size)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\HSH\AppData\Roaming\Python\Python311\site-packages\websockets\legacy\protocol.py", line 1119, in read_data_frame
frame = await self.read_frame(max_size)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\HSH\AppData\Roaming\Python\Python311\site-packages\websockets\legacy\protocol.py", line 1176, in read_frame
frame = await Frame.read(
^^^^^^^^^^^^^^^^^
File "C:\Users\HSH\AppData\Roaming\Python\Python311\site-packages\websockets\legacy\framing.py", line 69, in read
data = await reader(2)
^^^^^^^^^^^^^^^
File "c:\Program Files\Python311\Lib\asyncio\streams.py", line 726, in readexactly
raise exceptions.IncompleteReadError(incomplete, n)
asyncio.exceptions.IncompleteReadError: 0 bytes read on a total of 2 expected bytes

The above exception was the direct cause of the following exception:

self.run()

File "C:\Users\HSH\AppData\Roaming\Python\Python311\site-packages\pybithumb\websocket.py", line 71, in run
self.__aloop.run_until_complete(self.__connect_socket())
File "c:\Program Files\Python311\Lib\asyncio\base_events.py", line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "C:\Users\HSH\AppData\Roaming\Python\Python311\site-packages\pybithumb\websocket.py", line 66, in __connect_socket
recv_data = await websocket.recv()
^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\HSH\AppData\Roaming\Python\Python311\site-packages\websockets\legacy\protocol.py", line 568, in recv
await self.ensure_open()
File "C:\Users\HSH\AppData\Roaming\Python\Python311\site-packages\websockets\legacy\protocol.py", line 941, in ensure_open
raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedError: no close frame received or sent

The above error message is output.
What is the cause?
How can I solve this problem?

@dextertd
Copy link
Collaborator

It looks like you're not using the pybit library in this code. From the traceroute you're using the websockets library, but pybit doesn't use this – it uses websocket-client. So it looks like you're not using pybit here.

If you disagree, please send the code you used so that I can try reproducing this problem.

@hsh4269
Copy link
Author

hsh4269 commented Apr 30, 2024

import time
import datetime as dt
import math
from multiprocessing import Process, Manager
import asyncio
from pybit.unified_trading import HTTP, WebSocket

######## Defines ###########################
testnet = False

pybit = HTTP(
testnet=testnet,
api_key="111", #api key
api_secret="111", #api secreat
logging_level = 10,
)

ws = WebSocket(
testnet=False,
channel_type="spot",
)

def handle_message(message):
global Bybit_Ask_0, Bybit_Bid_0, Bybit_Ask_Volume_0
try:
orderbook_data = message["data"]

    Bybit_Ask_0 = float(orderbook_data['a'][0][0])
    Bybit_Ask_Volume_0 = float(orderbook_data['a'][0][1])
    Bybit_Bid_0 = float(orderbook_data['b'][0][0])

except Exception as e:
    print("handle_message" , e, dt.datetime.now(), sep='\t')
    pass  

############################################################
def main():

proc1 = Process(name="P_XRP",   target=sub_program, args=("XRP",))

proc1.start()   #XRP
time.sleep(1)

proc1.join()   #XRP

def sub_program(Set_Coin):

ws.orderbook_stream(1, 'XRPUSDT', handle_message)
time.sleep(3)
while True:
    print(Bybit_Ask_0, Bybit_Ask_Volume_0)

if name == "main":

main()

This one is I used code.

How can I solve this problem?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants