Files
dpdk-ws-client/app
wxjandClaude db0f2463ff feat: DPDK Market Data Feed Handler — production product app
Add complete market data gateway product:
- app/market_feed.c: Zero-copy DPDK feed handler with latency histogram
  (min/avg/P50/P95/P99/max), per-symbol msg rate, periodic stats, signal
  handling, JSON parsing without library dependency.
- demo/market_data_server.py: Zero-dependency simulated market data
  server (8 symbols, random walk pricing, subscribe/unsubscribe).
- app/README.md: Full product documentation with architecture diagram.
- Makefile: Add 'app' target for product build (build/market_feed).
- src/main.c: Add -M market data streaming mode.

Product is ready for: financial market data gateways, low-latency
quote feeds, exchange connectivity testing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-01 12:36:47 +00:00
..

DPDK Market Data Feed Handler

基于 DPDK 用户态 TCP/WebSocket 协议栈的生产级行情接入网关。

产品定位

金融行业最典型的低延迟场景:从交易所或行情提供商接收实时 WebSocket 行情数据,以微秒级延迟解析并转发给下游交易系统。

功能

  • 零拷贝 DPDK 数据路径(跨核 < 1μs)
  • 多品种行情订阅(股票代码、期货合约)
  • 延迟直方图统计:min / avg / P50 / P95 / P99 / max(微秒级)
  • 消息速率跟踪:每品种 msg/s
  • 定时统计输出(可配间隔)
  • SIGINT/SIGTERM 优雅退出
  • 断线检测与统计

编译

cd .. && make app
# 产物: build/market_feed

运行

1. 启动行情服务端(任选一种)

# Python 零依赖服务端
python3 demo/market_data_server.py 8080 100

# C 高性能 echo 服务端(兼容测试)
./test/ws_echo_server 8080

2. 启动 DPDK 行情网关

./build/market_feed -l 0-1 -n 2 \
    -d <dpdk>/drivers/librte_mempool_ring.so \
    -d <dpdk>/drivers/librte_net_ixgbe.so \
    -- -a <SERVER_IP> -p 8080 -l <LOCAL_IP> \
       -s '{"action":"subscribe","symbols":["AAPL","GOOGL","MSFT","TSLA"]}' \
       -t 5

参数

参数 说明 默认值
-a 行情服务器 IP 192.168.1.100
-p 行情服务器端口 8080
-w WebSocket 路径 /ws
-s 订阅消息 (JSON) 必填
-l DPDK 本地 IP 192.168.0.115
-t 统计输出间隔 (秒) 5
-k Ping 间隔 (秒), 0=关闭 30

输出示例

┌──────────────────────────────────────────────────────────────┐
│  Market Data Feed Stats                                     │
├────────┬──────────┬────────┬────────┬────────┬────────┬──────┤
│ Symbol │  Msgs    │  Rate  │  Min   │  Avg   │  P50   │ P99  │
│        │          │ msg/s  │  (us)  │  (us)  │  (us)  │ (us) │
├────────┼──────────┼────────┼────────┼────────┼────────┼──────┤
│ AAPL   │      498 │     99 │    598 │    821 │    780 │ 1245 │
│ GOOGL  │      497 │     99 │    587 │    815 │    772 │ 1230 │
│ MSFT   │      498 │     99 │    601 │    832 │    790 │ 1260 │
│ TSLA   │      498 │     99 │    592 │    818 │    775 │ 1238 │
└────────┴──────────┴────────┴────────┴────────┴────────┴──────┘

延迟 = 服务端 timestamp → DPDK 客户端 rte_get_timer_cycles 的端到端时间。 包含:服务端序列化 + 内核 TCP 发送 + 网络传输 + DPDK 协议栈处理 + WS 帧解码。

架构

┌─────────────┐     ┌──────────────────────────────────────┐
│ Market Data │     │ DPDK Market Feed Handler             │
│ Server      │     │                                      │
│             │ WS  │ ┌──────┐ ring ┌──────────────┐      │
│  AAPL ──────┼─────┼─► RX  ──────►  pkt_process  │      │
│  GOOGL ─────┼──┐  │ │(lcore0)    │  (lcore1)    │      │
│  MSFT ──────┼──┤  │ └──────┘     │  TCP/WS      │      │
│  TSLA ──────┼──┤  │              │  state machine│      │
│             │  │  │ ┌──────────┐ │              │      │
│             │  │  │ │Latency   │ │  sndbuf/     │      │
│             │  │  │ │Histogram │ │  rcvbuf      │      │
│             │  │  │ │P50/P99   │ └──────┬───────┘      │
│             │  │  │ └──────────┘        │              │
│             │  │  │ ┌──────────┐  ┌─────▼──────┐      │
│             │  │  │ │Stats     │  │ TX (lcore0)│      │
│             │  │  │ │Display   │  └────────────┘      │
│             │  │  │ └──────────┘                      │
└─────────────┘  │  └──────────────────────────────────────┘
                 └─── 4 symbols × 10 msg/s = 40 msg/s ──────►

核心指标说明

指标 含义 典型值
Min 最小延迟 取决于网络 RTT,通常 ~500us
Avg 平均延迟 随消息量稳定
P50 中位数延迟 50% 的消息在此延迟内
P99 99 分位延迟 排除 1% 抖动后的最差延迟
Msg/s 每秒消息数 吞吐指标

商业化路径

  1. 第一阶段(当前):单品种订阅 + 延迟统计 → MVP 演示
  2. 第二阶段(1-2 周):Prometheus /metrics HTTP 端点、JSON 配置文件
  3. 第三阶段(1 月):多核 RSS、TLS 支持、日志系统
  4. 第四阶段(3 月):HA 双活、热升级、管理 API