stock-ai-agent/test_websocket.py
2026-02-06 23:11:06 +08:00

95 lines
2.8 KiB
Python

#!/usr/bin/env python3
"""
测试 Binance WebSocket 连接
"""
import time
import sys
def test_websocket():
print("=" * 50)
print("Binance WebSocket 连接测试")
print("=" * 50)
# 1. 测试基本网络连接
print("\n1. 测试网络连接...")
try:
import socket
socket.setdefaulttimeout(10)
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(("stream.binance.com", 443))
print(" ✅ 可以连接到 stream.binance.com:443")
except Exception as e:
print(f" ❌ 无法连接到 Binance 服务器: {e}")
print(" 提示: 可能需要使用代理或 VPN")
return False
# 2. 测试 REST API
print("\n2. 测试 REST API...")
try:
import requests
resp = requests.get("https://api.binance.com/api/v3/ping", timeout=10)
if resp.status_code == 200:
print(" ✅ REST API 正常")
else:
print(f" ❌ REST API 返回状态码: {resp.status_code}")
except Exception as e:
print(f" ❌ REST API 请求失败: {e}")
# 3. 测试 WebSocket 连接
print("\n3. 测试 WebSocket 连接...")
try:
from binance import ThreadedWebsocketManager
received_data = []
def handle_message(msg):
if msg.get('e') == 'error':
print(f" ❌ WebSocket 错误: {msg}")
else:
symbol = msg.get('s', 'unknown')
price = msg.get('c', 'unknown')
received_data.append(msg)
print(f" 📊 收到数据: {symbol} = ${price}")
print(" 正在启动 WebSocket...")
twm = ThreadedWebsocketManager()
twm.start()
# 等待启动
time.sleep(2)
print(" 正在订阅 BTCUSDT...")
twm.start_symbol_ticker_socket(callback=handle_message, symbol="BTCUSDT")
# 等待数据
print(" 等待数据 (10秒)...")
for i in range(10):
time.sleep(1)
if received_data:
print(f"\n ✅ WebSocket 连接正常!已收到 {len(received_data)} 条数据")
twm.stop()
return True
print(" ❌ 10秒内未收到任何数据")
twm.stop()
return False
except Exception as e:
print(f" ❌ WebSocket 测试失败: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
success = test_websocket()
print("\n" + "=" * 50)
if success:
print("结论: WebSocket 连接正常")
else:
print("结论: WebSocket 连接有问题")
print("\n可能的解决方案:")
print("1. 检查网络连接")
print("2. 使用代理/VPN (某些地区无法直接访问 Binance)")
print("3. 检查防火墙设置")
print("=" * 50)