我正在try 实现一个websocket客户端,该客户端连接到流行的加密交换FTX.我已将问题简化为以下示例代码:
import asyncio
import websockets
import json
async def consumer() -> None:
async with websockets.connect("wss://ftx.com/ws/") as websocket:
await websocket.send(json.dumps({
"op":"subscribe",
"channel":"trades",
"market":"BTC-PERP"
}))
totalVol = 0
async for message in websocket:
message = json.loads(message)
# print("message: " + str(message))
if message["type"]=="update":
result = message["data"]
for record in result:
totalVol += float(record["size"])
print("totalVol: " + str(totalVol))
asyncio.run(consumer())
整个程序的输出与预期一样,但有一个主要问题:将输出到控制台的累计交易量太低.它应该大约大1000x-10000x.通过从webscoekt数据构建蜡烛并与历史API中的相同分辨率进行比较,我可以更严格地说明这一点.但是,如果你访问ftx网站,看到BTC-PERP市场的1分钟交易量往往是每分钟数百万,而这是每分钟数百的打印量,那么很容易让自己相信这一点.
我做了一些研究,最好的答案似乎是,问题在于没有使用消息处理的异步实现.但我相信上述实现是异步的.
请有人帮助我理解为什么我没有看到预期的行为,以及我如何修复它?
非常感谢.
保罗