Open hsh4269 opened 9 months ago
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.
So...... why does this happen?
I'm not able to reproduce this, can you send the code you used?
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()
The above error message is output. What is the cause? How can I solve this problem?
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.
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?
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?