从零构建一个跨语言实时行情系统(一):设计思路与架构剖析
🚀 本文是“从零构建一个跨语言实时行情系统”系列第一篇,带你快速了解系统架构、模块设计与运行机制。
涵盖内容:
- C++ 行情模拟器 + WebSocket 推送实现
- Python 接入 FastAPI,统一控制层接口
- WebSocket 毫秒级行情流 + 订阅机制
- Docker 一键部署 + 快速运行
📌 所有代码已开源,建议收藏 + 关注专栏,不错过后续内容!
在构建量化交易、金融终端或数据分析平台的过程中,实时行情服务是不可或缺的基础组件。
但现实中,大多数企业或开发者要么依赖第三方服务(如行情网关、数据分发平台),要么面对“如何自建一个灵活、高性能、可维护的行情系统”这一难题。
本系列文章将手把手带你实现一个完整的跨语言实时行情系统,项目代号 yquote,采用 C++ + Python 混合架构,具备以下特点:
- 🚀 高性能:C++ 后端实现核心行情处理与推送
- 🧩 跨语言协作:Python 提供 API 控制层,适合快速集成
- 📡 实时推送:WebSocket 通讯实现毫秒级数 据推送
- 🐳 Docker 化部署:支持一键启动,开发部署零障碍
💡 为什么写这个系列?
作为一名金融后端开发者,我的经验是:
- ❌ 很多开发者虽懂业务,但系统封闭,缺少系统搭建经验
- ❌ 很多系统黑盒实现,难以调试与观测,依赖复杂难以部署运行
- ❌ 接口封闭,缺乏定制能力,开发语言限制严格,无法跨语言开发业务
- ❌ 缺乏教育意义,不适合训练 AI 模型或教学演示
这个系列的目标是——构建一个开源、高可控、高扩展的行情系统骨架,同时具备工程实践与教学双重价值。
与此同时,希望将我构建实时行情系统的实战经验整理成文章,分享给有类似目标的技术同仁——你可能是:
- 想打造自己的量化平台的投资者;
- 想在金融数据领域一起深耕底层技术的工程师;
- 想学习 C++ 与 Python 甚至 golang Rust 跨语言系统构建方式的开发者。
👉 这不仅是一篇技术教程,更是一份与大家一起学习进步的渠道。
📦 项目地址 & 快速体验
👉 源码地址:Gitee - yquote 项目(欢迎 star⭐️)
git clone https://gitee.com/devilisy/yquote.git
cd yquote
# 脚本构建C++后端
cd cpp_backend
./build.sh # Release模式
./build.sh Debug # Debug模式
# 启动Python接口端
cd python_api
pip install -r requirements.txt
python app.py
然后访问:http://localhost:8000 可立即体验行情推送。
🧱 系统架构图
数据模拟器(模拟实时行情)、核心处理引擎(C++)、Python 网关接口、WebSocket 服务、Docker 化部署。
┌─────────────────┐ WebSocket ┌─────────────────┐
│ Python API │ ←─────────────→ │ C++ Backend │
│ (FastAPI) │ │ (WebSocket) │
└─────────────────┘ └─────────────────┘
↑ ↑
│ HTTP/WebSocket │
↓ ↓
┌─────────────────┐ ┌─────────────────┐
│ Web Client │ │ Market Data │
│ (Browser) │ │ Simulator │
└─────────────────┘ └─────────────────┘
🧪 系统模块总览
模块说明
- C++ Market Data Simulator:模拟真实行情波动,每秒生成数十条行情 JSON 数据
- Quote Subscription Service(C++):通过 WebSocket 推送实时行情流
- Python API 网关:封装订阅、取消订阅等控制接口,支持用户 HTTP 请求
- 用户客户端:通过 Python/浏览器/量化平台订阅数据,实现实时可视化或数据接入
📦项目结构拆解(代码仓库结构)
项目结构如下:
yquote/
├── cpp_backend/ # 核心行情服务(含行情生成器和推送模块)
├── python_api/ # Python Web 接口服务(FastAPI 实现)
├── docker/ # 多语言镜像构建与编排
├── tests/ # 功能测试脚本与订阅验证
├── start.sh # 一键部署脚本
└── README.md / TECHNICAL.md ... # 各类说明文档
🏗️核心数据流逻辑
行情生成器(C++) --> JSON 编码 --> WebSocket 推送 --> Python API 订阅控制 --> 客户端接收
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Web Client │ │ Python Client │ │ Test Client │
│ (Browser) │ │ (Script) │ │ (Testing) │
└─────────┬───────┘ └─────────┬───────┘ └─────────┬───────┘
│ │ │
│ HTTP/WebSocket │ WebSocket │ WebSocket
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ Python API Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ FastAPI │ │ WebSocket │ │ Auto Reconnect │ │
│ │ Server │ │ Client │ │ Manager │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
└─────────────────────┬───────────────────────────────────────────┘
│ WebSocket
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ C++ Backend Core │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Config │ │ WebSocket │ │ Market Data │ │
│ │ Manager │ │ Server │ │ Simulator │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Quote │ │ Client │ │ Thread Pool │ │
│ │ Manager │ │ Manager │ │ Manager │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
核心组件
1. 配置管理器 (ConfigManager)
class ConfigManager {
public:
bool loadConfig(const std::string& config_file);
std::string getString(const std::string& section, const std::string& key, const std::string& default_value = "") const;
int getInt(const std::string& section, const std::string& key, int default_value = 0) const;
double getDouble(const std::string& section, const std::string& key, double default_value = 0.0) const;
bool getBool(const std::string& section, const std::string& key, bool default_value = false) const;
std::vector<std::string> getStringList(const std::string& section, const std::string& key, const std::vector<std::string>& default_value = {}) const;
void printConfig() const;
};
功能特性:
- INI格式配置文件解析
- 多种数据类型支持 (string, int, double, bool, string_list)
- 默认值机制
- 配置验证和错误处理
- 运行时配置显示
2. WebSocket服务器 (WebSocketServer)
class WebSocketServer {
public:
bool start();
void stop();
void sendMessage(const std::string& client_id, const std::string& message);
void sendToSubscribers(const std::vector<std::string>& client_ids, const std::string& message);
std::vector<std::string> getClientIds() const;
// 回调函数设置
void setMessageCallback(std::function<void(const std::string&, const std::string&)> callback);
void setClientConnectCallback(std::function<void(const std::string&)> callback);
void setClientDisconnectCallback(std::function<void(const std::string&)> callback);
};
技术实现:
- 符合RFC 6455标准的WebSocket协议
- 标准握手流程 (SHA-1 + Base64)
- 完整的帧格式解析和生成
- 掩码处理和验证
- 多线程客户端处理
- 线程安全的客户端管理
3. 行情管理器 (QuoteManager)
class QuoteManager {
public:
void updateQuote(const QuoteData& quote);
std::vector<QuoteData> getAllQuotes() const;
QuoteData getQuote(const std::string& symbol) const;
// 订阅管理
void subscribe(const std::string& client_id, const std::vector<std::string>& symbols);
void unsubscribe(const std::string& client_id, const std::vector<std::string>& symbols);
void unsubscribeAll(const std::string& client_id);
std::vector<std::string> getSubscribers(const std::string& symbol) const;
size_t getSubscriptionCount() const;
};
核心特性:
- 双向索引订阅管理 (客户端↔股票)
- 线程安全的数据访问
- 高效的订阅查询
- 自动清理机制
4. 市场数据模拟器 (MarketDataSimulator)
class MarketDataSimulator {
public:
void start();
void stop();
void addSymbol(const std::string& symbol, double initial_price);
void removeSymbol(const std::string& symbol);
void setUpdateInterval(int interval_ms);
void setPriceVolatility(double volatility_percent);
void setDataCallback(std::function<void(const QuoteData&)> callback);
bool isRunning() const;
};
模拟特性:
- 可配置的价格波动率
- 可调节的更新频率
- 多股票并行模拟
- 真实的市场数据格式
🚀 部署概述
支持的操作系统
- Linux: Ubuntu 20.04+, CentOS 8+, RHEL 8+
- macOS: 10.15+
- Windows: Windows 10+ (WSL2推荐)
开发环境部署
Ubuntu/Debian 系统
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装基础依赖
sudo apt install -y build-essential cmake git curl
# 安装OpenSSL开发库
sudo apt install -y libssl-dev
# 安装Python和pip
sudo apt install -y python3 python3-pip python3-venv
# 验证安装
gcc --version
cmake --version
python3 --version
其他系统
详见仓库文档
🔍 后续计划预告
- 🧪 WebSocket 数据推送调优技巧
- 🧬 Pybind11 跨语言回调设计
- ⚙️ Docker Compose 多模块部署
📎 附录:项目定位与适用人群
| 角色 | 适用方式 |
|---|---|
| C++/Python 开发者 | 学习系统级数据推送服务设计 |
| 想自建行情系统的量化研究员 | 快速搭建自用行情推送网关 |
| 跨语言系统架构实践者 | 快速搭建多语言集群,跨语言进程通信 |
| 网课教培 | 数据通信课程实验平台 |
欢迎关注本系列,后续还将包括:
-
🔧 性能优化与监控
-
🔄 多用户订阅管理
-
🧬 Pybind11/Golang/ZeroMQ 等跨语言扩展
-
🧭 历史行情回放与回测支持
👉 点赞 + 收藏 + 关注我,持续更新系统开发实战干货!