Heartbeat Event心跳事件
该接口说明 官方实时流协议中服务端周期性下发的 heartbeat 保活事件帧格式与半开死连接超时重连机制。调用本站网关 REST 接口时,可通过全局复用 requests.Session() 开启 HTTP Keep-Alive 连接池降低握手开销。
wss://socket.financialmodelingprep.com(官方协议参考 · 本站网关主供 REST /stable/*)数据更新周期
该接口暂无固定更新周期(多为按需更新的参考或静态数据)。
接口说明
- 服务端周期性保活心跳帧:长连接建立期间,服务端约每分钟向客户端下发一次
{"event":"heartbeat","timestamp":...}事件帧(通常无业务data载荷),用于维持 NAT 映射表并检测半开死连接。 - 超时看门狗与指数退避重连:客户端应维护最近一次收到任意报文或
heartbeat帧的本地时间戳;若连续超过 90 秒未收到任何帧,应主动判定连接假死并触发指数退避(Exponential Backoff)重连与重新订阅。 - 过滤心跳帧与 HTTP 连接池复用:在流式消息消费循环中遇到
event == "heartbeat"应仅刷新健康检查时间并立即跳过,切勿送入下游入库管道;若调用本站网关 REST 接口,推荐全局复用requests.Session()维持 HTTP Keep-Alive。 - 协议边界与 REST 替代:本站网关(
quote-fmp.com)当前主供/stable/*HTTP REST 接口,WebSocket 流暂未开放;实盘多股高频刷屏请直接调用 Stock Batch Quote(股票批量报价)或 Exchange Stock Quotes(交易所股票批量报价)。 - 配套投研接口:Socket.io WebSocket(Socket.IO 实时连接) · Exchange Stock Quotes(交易所全量报价) · Global Exchange Market Hours(全球交易所交易时段) · Stock Batch Quote(股票批量报价)
调用代码示例
Python 关键代码本站网关(quote-fmp.com)主供 /stable/* HTTP REST 接口(WebSocket 暂未开放);上方展示在 Python 中复用 requests.Session() 维持 HTTP Keep-Alive 连接池并发起轻量级连通性探活的写法。
session = requests.Session()
# 本站网关(quote-fmp.com)当前对客主供全量 REST 接口(/stable/*),WebSocket 流暂未开放
resp = session.get(
"https://quote-fmp.com/stable/all-exchange-market-hours",
params={"apikey": FMP_KEY},
timeout=15,
)
resp.raise_for_status()
df = pd.DataFrame(resp.json())
# 官方长连接心跳保活事件(heartbeat)帧格式参考:
# hb_frame = {"event": "heartbeat", "data": {}}参数使用和避坑
2 组参数组合 · 2 条避坑以下列出本接口在高频投研与回测场景下的常用 Query 参数组合写法:
| 投研场景 | Query 参数组合示例 | 返回数据特征与用途 |
|---|---|---|
| 网关连通性探活:拉取全球交易所状态表验证 Key 与网络延迟 | GET /stable/all-exchange-market-hours | 响应轻量且无需业务参数,适合在量化服务启动时验证 API Key 有效性并预热 requests.Session() TLS 连接池。 |
| 官方流协议参考:周期性 heartbeat 空载荷保活帧 | {"event": "heartbeat", "data": {}} | 官方流服务端每分钟下发一次心跳事件,用于刷新中间 NAT 网关会话表并供客户端检测半开死连接。 |
若每次调用 requests.get('https://quote-fmp.com/stable/...') 都新建短连接,每次请求都会额外耗费 100~250ms 在 TCP 三次握手与 TLS 协商上。全局复用同一个 requests.Session() 实例可自动保持底层连接长活。
当跨境链路发生路由切换或 NAT 超时静默断连时,操作系统的 TCP Socket 不会立即报错。流式客户端必须记录最后收包时间戳(含行情帧与 heartbeat 帧),若连续 30 秒无任何报文到达则强制销毁连接重连。
返回数据
2 个字段本接口示例响应共包含 2 个字段(数值型 1 个,文本/日期/布尔型 1 个)。下表列出全部字段名、类型、首条记录真实样本值与中文释义,实际返回会因接口与数据状态有所不同。
| 字段 | 类型 | 示例值 | 说明 |
|---|---|---|---|
event | string | "heartbeat" | 事件名称 |
timestamp | number | 1747473420002 | 时间戳 |
查看响应数据示例(原始 JSON)
{
"event": "heartbeat",
"timestamp": 1747473420002
}常见问题解答(FAQ)
2 个问题使用 requests.Session() 访问本站 REST 网关时,需要手动发心跳请求保活吗?
不需要。Python requests.Session() 底层基于 urllib3 连接池管理 HTTP Keep-Alive;即使连接因长时间空闲被服务端关闭,urllib3 在下次发请求时也会自动透明重建连接。
服务启动自检(Health Check)时,调哪个接口验证 API Key 最合适?
推荐调用 /stable/all-exchange-market-hours 或 /stable/available-exchanges。这两个接口载荷极小、响应极快,若返回 200 OK 即证明 Key 处于有效状态且网络连通正常;若返回 401 则说明 Key 缺失、拼写错误或已过期。
同模块相关接口对比
Websocket本接口路径 heartbeat-event,无必填参数。 同一模块「Websocket」下共 6 个接口,下表列出其余 5 个, 按粒度与查询维度对比,避免选错接口。
| 接口 | 路径 | 核心差异与适用场景 |
|---|---|---|
| 标准 WebSocketStandard WebSocket | standard-websocket | 官方原生 WebSocket 实时行情通道的握手流程与登录认证帧格式规范 |
| 报价订阅Quote Subscription | quote-subscription | 官方实时流协议中发起单票或多票实时报价订阅的指令载荷与逐笔成交、盘口帧结构 |
| 市场行情流订阅Market Stream Subscription | market-stream-subscription | FMP 官方实时流协议中全市场聚合流订阅指令的帧格式与高吞吐消费注意事项 |
| 取消单只标的订阅Unsubscribe Ticker | unsubscribe-ticker | 官方实时流协议中取消指定标的报价订阅的退订指令结构与客户端订阅列表维护方式 |
| 取消市场行情流订阅Unsubscribe Market Stream | unsubscribe-market-stream | 官方实时流协议中关闭全市场行情聚合推送通道的退订指令格式与连接释放规范 |