Socket.io WebSocketSocket.IO 实时连接
该接口文档梳理官方 Socket.IO 实时流通道的连接握手流程、协议版本要求与事件监听规范。鉴于本站网关当前对客主供高可用 HTTP REST 接口,实盘高频行情刷新推荐使用批量报价 REST 接口替代长连接维护。
wss://socket.financialmodelingprep.com(官方协议参考 · 本站网关主供 REST /stable/*)数据更新周期
该接口暂无固定更新周期(多为按需更新的参考或静态数据)。
接口说明
- Socket.IO 协议握手与事件监听:官方 Socket.IO 通道(
wss://socketio.financialmodelingprep.com)基于 Engine.IO 帧协议封装,连接成功后通过emit("login", {"apiKey": ...})完成鉴权并按事件名绑定监听回调。 - 协议版本匹配与框架依赖注意:Socket.IO 客户端库(如
python-socketio或前端socket.io-client)主版本号须与服务端 Engine.IO 协议版本严格匹配,否则会在握手阶段反复报400 Bad Request或降级为长轮询。 - 后端统一采集与 REST 架构建议:切勿在浏览器前端代码中直接暴露
apikey发起实时流连接;生产环境应由后端服务通过本站网关(quote-fmp.com)高可用 REST 批量接口统一采集并写入 Redis 缓存后再向前端分发。 - 协议边界与 REST 替代:本站网关(
quote-fmp.com)当前主供/stable/*HTTP REST 接口,WebSocket 流暂未开放;实盘多股高频刷屏请直接调用 Stock Batch Quote(股票批量报价)或 Exchange Stock Quotes(交易所股票批量报价)。 - 配套投研接口:Standard WebSocket(标准 WebSocket) · Heartbeat Event(心跳事件) · Stock Batch Quote(股票批量报价) · Stock Batch Quote Short(股票批量精简报价)
调用代码示例
Python 关键代码本站网关(quote-fmp.com)当前仅开放 /stable/* REST 接口,不支持 Socket.IO 连接;上方代码展示通过 /stable/batch-quote 轮询科技股实时行情的替代写法及官方 emit 参数参考。
session = requests.Session()
# 本站网关(quote-fmp.com)当前对客主供全量 REST 接口(/stable/*),WebSocket 流暂未开放
resp = session.get(
"https://quote-fmp.com/stable/batch-quote",
params={"symbols": "TSLA,AMZN,META", "apikey": FMP_KEY},
timeout=15,
)
resp.raise_for_status()
df = pd.DataFrame(resp.json())
# 官方 Socket.IO 客户端事件发送参考:
# sio.emit("login", {"apiKey": FMP_KEY})
# sio.emit("subscribe", {"ticker": ["tsla", "amzn"]})参数使用和避坑
2 组参数组合 · 2 条避坑以下列出本接口在高频投研与回测场景下的常用 Query 参数组合写法:
| 投研场景 | Query 参数组合示例 | 返回数据特征与用途 |
|---|---|---|
| 网关 REST 替代方案:批量轮询重仓股实时盘口快照 | GET /stable/batch-quote?symbols=TSLA,AMZN,META | 使用标准 requests 客户端一次拉回多只股票的 price、changePercentage、dayHigh、dayLow 与 volume,免去 Socket.IO 版本适配。 |
| 官方 Socket.IO 协议参考:通过 emit 依次发送登录与订阅事件 | emit("login", {"apiKey": "YOUR_KEY"}) -> emit("subscribe", {"ticker": ["tsla"]}) | Socket.IO 客户端将事件名作为 emit 首参数,载荷内无需再包一层 event 字段,标的代码须用小写字符串。 |
对接本站网关(quote-fmp.com)时不需要安装 python-socketio 或处理 Engine.IO 握手降级;直接通过 HTTPS 请求 /stable/batch-quote 即可稳定获取实时报价。
官方 Socket.IO 服务端对客户端 SDK 的 EIO 协议号敏感。若在自建流式客户端中遇到持续 400 或退化为 HTTP 长轮询,必须检查 SDK 版本并配置指数退避重连上限。
返回数据
4 个字段本接口示例响应共包含 4 个字段(数值型 1 个,文本/日期/布尔型 3 个)。下表列出全部字段名、类型、首条记录真实样本值与中文释义,实际返回会因接口与数据状态有所不同。
| 字段 | 类型 | 示例值 | 说明 |
|---|---|---|---|
event | string | "login" | 事件名称 |
data | object | {…} | 实时流事件载荷对象(随 event 类型携带鉴权状态或实时报价字段,下方已展开本示例内全部 2 个子字段) |
data.status | number | 200 | 连接或鉴权响应状态码(如 200 代表鉴权成功) |
data.message | string | "Authenticated" | 服务端返回的状态说明或提示信息 |
查看响应数据示例(原始 JSON)
{
"event": "login",
"data": {
"status": 200,
"message": "Authenticated"
}
}常见问题解答(FAQ)
2 个问题在 Web 行情看板中不连 Socket.IO,如何安全高效地向前端推送实时股价?
推荐由您的后端定时任务每 3~5 秒调用一次本站 /stable/batch-quote 更新 Redis 行情哈希表,再由您自己的后端向浏览器分发。这样既避免了在前端暴露 apikey,又彻底规避了浏览器端长连接断线重连问题。
Socket.IO 订阅参数里的股票代码为什么要求小写?
官方流式转发器内部按小写 ticker 路由频道(如 "tsla");而调用本站 /stable/batch-quote 等 REST 接口时,统一使用标准大写代码(如 symbols=TSLA,AMZN)。
同模块相关接口对比
Socket.io本接口路径 socket-io-websocket,无必填参数。 同一模块「Socket.io」下共 5 个接口,下表列出其余 4 个, 按粒度与查询维度对比,避免选错接口。
| 接口 | 路径 | 核心差异与适用场景 |
|---|---|---|
| 报价订阅Quote Subscription | quote-subscription | 官方实时流协议中发起单票或多票实时报价订阅的指令载荷与逐笔成交、盘口帧结构 |
| 市场行情流订阅Market Stream Subscription | market-stream-subscription | FMP 官方实时流协议中全市场聚合流订阅指令的帧格式与高吞吐消费注意事项 |
| 取消单只标的订阅Unsubscribe Ticker | unsubscribe-ticker | 官方实时流协议中取消指定标的报价订阅的退订指令结构与客户端订阅列表维护方式 |
| 取消市场行情流订阅Unsubscribe Market Stream | unsubscribe-market-stream | 官方实时流协议中关闭全市场行情聚合推送通道的退订指令格式与连接释放规范 |