# 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 股(已预生成) ``` ## 快速开始 ```bash 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 ``` ## 更新股票列表 ```bash # 重新从新浪 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 股票列表文件 [default: stocks.txt] -o, --output 输出目录 [default: data] --chunk-size 每个连接的股票数 [default: 500] --buffer 通道缓冲容量 [default: 131072] -h, --help -V, --version ``` ## 日志级别 ```bash 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` 可替换为 `broadcast` channel, 向下游实时分析模块(Python、数据库写入器等)同时分发数据,无需修改采集层。