Global
Dial - 建立网络连接
建立 TCP、TLS 或 WebSocket 连接。
语法
python
# TCP 连接
conn = Dial("example.com:80")
# WebSocket 连接
ws = Dial("wss://stream.binance.com:9443/ws/btcusdt@kline_1m")
# 带协议的连接
conn = Dial("tcp://example.com:80")
conn = Dial("tls://example.com:443")参数
| 参数名 | 类型 | 必选 | 默认值 | 说明 |
|---|---|---|---|---|
| address | string | 是 | 无 | 连接地址,支持多种格式 |
| timeout | number | 否 | 10000 | 超时时间(毫秒) |
地址格式
| 格式 | 说明 | 示例 |
|---|---|---|
host:port | 默认TCP连接 | "baidu.com:80" |
tcp://host:port | TCP连接 | "tcp://example.com:80" |
tls://host:port | TLS加密连接 | "tls://example.com:443" |
ws://host:port/path | WebSocket连接 | "ws://echo.websocket.org" |
wss://host:port/path | 安全WebSocket | "wss://stream.binance.com:9443/ws" |
返回值
返回连接对象,失败返回 None。
TCP 连接对象方法
| 方法 | 说明 |
|---|---|
read(size) | 读取数据 |
write(data) | 写入数据 |
close() | 关闭连接 |
WebSocket 连接对象方法
| 方法 | 说明 |
|---|---|
recv(timeout_ms) | 接收消息 |
send(data) | 发送消息 |
ping(payload) | 发送ping帧 |
pong(payload) | 发送pong帧 |
close() | 关闭连接 |
subscribe(params) | 订阅(通用格式) |
unsubscribe(params) | 取消订阅 |
示例
示例1: WebSocket 实时行情
python
import json
# 连接到 Binance WebSocket
ws = Dial("wss://stream.binance.com:9443/ws/btcusdt@kline_1m")
if ws:
Log("✅ WebSocket 已连接")
while True:
# 接收消息
msg = ws.recv(5000) # 5秒超时
if msg:
data = json.loads(msg)
kline = data['k']
Log(f"时间: {_D(kline['t']/1000)}")
Log(f"收盘价: {kline['c']}")
else:
# 超时,发送 ping 保持连接
ws.ping()
Sleep(100)
else:
Log("❌ WebSocket 连接失败")示例2: 订阅多个频道
python
ws = Dial("wss://stream.binance.com:9443/ws")
if ws:
# 订阅K线和交易数据
ws.subscribe(["btcusdt@kline_1m", "btcusdt@trade"])
while True:
msg = ws.recv(5000)
if msg:
data = json.loads(msg)
Log(f"收到数据: {data}")
Sleep(100)示例3: TCP 连接
python
# 连接到服务器
conn = Dial("tcp://example.com:8080", 5000)
if conn:
# 发送数据
conn.write("GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
# 读取响应
response = conn.read(4096)
if response:
Log(f"响应: {response}")
# 关闭连接
conn.close()示例4: WebSocket 心跳保持
python
import time
ws = Dial("wss://stream.example.com/ws")
last_ping = time.time()
while True:
# 每30秒发送一次ping
if time.time() - last_ping > 30:
ws.ping()
last_ping = time.time()
Log("发送心跳")
# 接收消息
msg = ws.recv(1000)
if msg:
Log(f"收到: {msg}")
Sleep(100)注意事项
-
连接管理: 记得在不使用时调用
close()关闭连接 -
超时设置: WebSocket
recv()方法支持超时参数 -
心跳维护: 长连接需要定期发送 ping 保持活跃
-
错误处理: 连接失败返回
None,应检查返回值 -
依赖库: WebSocket 需要
websocket-client库 -
数据格式:
- WebSocket 通常收发 JSON 字符串
- TCP 收发原始字节数据
-
协议选择:
- 实时行情: 使用 WebSocket
- 简单请求: 使用 HttpQuery
- 自定义协议: 使用 TCP/TLS