Python WebSocket 指南
适用于 Backpack Exchange API
本指南演示了如何使用 Python 连接 Backpack Exchange 的 WebSocket API。 WebSocket 提供用于市场数据和账户更新的实时数据流。
前提条件
若要使用私有数据流,请先获取您的 API 密钥: https://backpack.exchange/portfolio/settings/api-keys
安装所需的 Python 库:
• websockets - 用于建立 WebSocket 连接 • cryptography - 用于生成 X-Signature(仅用于私有数据流)
pip install websockets cryptography如果使用私有数据流,建议安装 dotenv-python,通过环境变量安全管理密钥
pip install python-dotenv创建 .env 文件并如下存储您的密钥:
PUBLIC_KEY=zDIJj9qneWIY0IYZ5aXoHcNMCm+XDhVcTssiT0HyY0A=
SECRET_KEY=4odxgSUxFrC/zsKWZF4OQwYAgnNu9hnWH3NxWfLAPz4=创建 .gitignore 文件,并添加 .env,以避免其被纳入版本控制。
.env导入所需库:
import json
import asyncio
import websockets
import base64
from time import time
import os
from cryptography.hazmat.primitives.asymmetric import ed25519
from dotenv import load_dotenv, find_dotenvWebSocket API 基础
Backpack Exchange WebSocket API 地址为:wss://ws.backpack.exchange
WebSocket 流的命名格式为:<类型>.<交易对>
例如:
• depth.SOL_USDC - SOL/USDC 的订单簿
• trade.SOL_USDC - SOL/USDC 的成交信息
为什么使用异步方式处理 WebSocket?
WebSocket 适用于持续连接并实时接收数据的场景。使用异步(async)方式编程具有以下优势:
非阻塞 I/O:异步可处理多个连接而不阻塞主线程。
资源高效:相比多线程,异步使用更少的资源。
性能更佳:处理大量连接时,异步开销更小。
实时处理:适用于需持续接收和处理数据的场景。
传统同步方式存在诸多缺点:
线程管理复杂:需要手动管理多个线程
资源占用高:每个连接都需独立线程
错误处理困难:线程间错误传播复杂
扩展性差:不易扩展以支持更多连接
而异步方式(本指南中的示例)更简洁、高效且更易维护。
公共数据流
无需身份验证即可订阅公共数据流,直接连接即可。
示例:订阅公共数据流
示例:订阅多个公共数据流
私有数据流
私有数据流以 account. 开头,需要 API 密钥认证,可获取账户相关更新信息。
私有流的身份认证步骤:
构造签名字符串,格式如下:
instruction=subscribe×tamp=1614550000000&window=5000使用私钥进行签名
在订阅消息中添加如下签名字段(数组形式):
"signature": ["<验证公钥>", "<签名>", "<时间戳>", "<时间窗>"]
验证公钥和签名需使用 base64 编码。
示例:订阅私有数据流
WebSocket 保活机制:Ping/Pong
WebSocket 连接需通过 Ping-Pong 保持连接活跃。好消息是:Python 的 websockets 库已自动处理该机制。
参考资料
有关更多信息,请访问官方文档:https://docs.backpack.exchange/#tag/Streams
Last updated
