拒绝轮询!Python Websocket 实时订阅港股行情的最佳实践

42 阅读2分钟

在金融业务开发中,"实时性"是一个绕不开的话题。最近在做一个港股行情的监控看板,踩了不少坑,也总结了一些最佳实践。今天直接上干货,教你如何用 Python 搞定港股实时数据流。

场景描述 需求很简单:实时获取恒生指数和热门个股的最新成交价。 传统做法:前端写个 setInterval 每秒调一次后端接口。 后果:服务器压力大,数据延迟高,用户体验极差。 解决方案:WebSocket 长连接。

代码实现 不管是自建行情中心,还是对接第三方(如 AllTick API 等成熟方案),客户端的逻辑其实大同小异。

关键点在于:

  1. 心跳保活:防止连接意外断开。
  2. 断线重连:网络波动时的自动恢复(虽然本demo未展示,但生产环境必备)。
  3. 数据订阅:按需索取,节省带宽。
**pip install websocket-client**

核心代码 Demo 这段代码可以直接 Copy 运行。它展示了如何建立连接并订阅 00700.HK

**import websocket  
import json  
  
url = "wss://api.alltick.co/realtime/hk"  
  
def on_message(ws, message):  
    data = json.loads(message)  
    # 打印最新成交价和涨跌情况  
    print(f"{data['symbol']} 最新价格: {data['last_price']} 涨跌: {data['change']}")  
  
def on_open(ws):  
    # 订阅恒生指数及指定股票行情  
    ws.send(json.dumps({  
        "action": "subscribe",  
        "symbols": ["HSI", "00700.HK"]  
    }))  
  
ws = websocket.WebSocketApp(url, on_message=on_message, on_open=on_open)  
ws.run_forever()**

数据结构解析 收到的 JSON 数据通常包含 last_price(最新价)、volume(成交量)等核心字段。利用 Pandas 可以快速将其转换为 DataFrame 进行切片分析。

import pandas as pd

# 假设我们有一个行情列表
ticks = [
    {"time": "09:30:01", "price": 500, "volume": 100},
    {"time": "09:30:02", "price": 502, "volume": 50},
    {"time": "09:30:03", "price": 501, "volume": 80},
]

df = pd.DataFrame(ticks)
df['time'] = pd.to_datetime(df['time'])
print(df)

总结 对于实时性要求高的应用,WebSocket 是不二之选。掌握了这个技能点,你在开发类似的实时监控、即时通讯应用时都能游刃有余。

Gemini_Generated_Image_bpfx7tbpfx7tbpfx.jpg