sina-real-time
新浪财经 WebSocket 实时行情采集工具(Rust 实现)
功能
- 连接
wss://hq.sinajs.cn/wskt实时推送接口 - 自动重连(指数退避,最大 30 秒间隔)
- 按
--chunk-size拆分为多个并行 WebSocket 连接,支持全量沪深 A 股(5189 只) - 数据持久化到本地 CSV,按天轮转(
data_YYYY-MM-DD.csv) - 基于 Tokio 异步运行时,内置缓冲通道解耦采集与存储
实测性能(10 核 / 16 GB / macOS)
| 股票数 | 连接数 | 写入速度 |
|---|---|---|
| 100 | 1 | ~45 条/秒 |
| 1000 | 2 | ~440 条/秒 |
| 5189 | 11 | ~968 条/秒 |
股票列表文件
sina-collector/
├── stocks.txt # 12 只样本(测试用)
├── stocks_100.txt # 100 只(用 fetch_stocks.py 生成)
├── stocks_1000.txt # 1000 只
└── stocks_all.txt # 5189 只全量沪深 A 股(已预生成)
快速开始
cd sina-collector
cargo build --release
# 样本测试(12 只)
./target/release/sina-realtime-collector
# 100 只
./target/release/sina-realtime-collector --stocks stocks_100.txt --output data
# 1000 只
./target/release/sina-realtime-collector --stocks stocks_1000.txt --output data
# 全量沪深 A 股(5189 只,11 个并行连接)
./target/release/sina-realtime-collector --stocks stocks_all.txt --output data
更新股票列表
# 重新从新浪 API 拉取最新股票列表(约 53 次请求,耗时 ~3 秒)
python3 scripts/fetch_stocks.py
# 同时生成 100 只样本
python3 scripts/fetch_stocks.py --sample 100
# 指定输出路径
python3 scripts/fetch_stocks.py -o /path/to/stocks.txt
数据格式
CSV 文件每行:
received_at,code,fields
2026-02-26T14:33:46.037,sh600519,"贵州茅台,昨收,今开,当前,最高,最低,买1,卖1,成交量,成交额,<买5档>,<卖5档>,日期,时间,状态"
fields 列字段顺序:
名称, 昨收, 今开, 当前价, 最高, 最低, 买一价, 卖一价, 成交量(股), 成交额(元), 买5档×(量,价)×5, 卖5档×(量,价)×5, 日期, 时间, 状态
命令行参数
Options:
-s, --stocks <FILE> 股票列表文件 [default: stocks.txt]
-o, --output <DIR> 输出目录 [default: data]
--chunk-size <N> 每个连接的股票数 [default: 500]
--buffer <N> 通道缓冲容量 [default: 131072]
-h, --help
-V, --version
日志级别
RUST_LOG=debug ./target/release/sina-realtime-collector --stocks stocks_all.txt --output data --chunk-size 200 # 详细日志
RUST_LOG=warn ./target/release/sina-realtime-collector # 仅告警
后续扩展
storage.rs 中的 mpsc::Receiver<String> 可替换为 broadcast channel,
向下游实时分析模块(Python、数据库写入器等)同时分发数据,无需修改采集层。