---
title: GraphQL订阅与实时推送实践
keywords:
- GraphQL Subscriptions
- WebSocket
- SSE
- Pub/Sub
- Dataloader
- 过滤
- 授权
- 速率限制
- 重连
- 验证
description: 设计基于 GraphQL Subscriptions 的实时推送,选择传输(WS/SSE),集成后端 Pub/Sub 与过滤授权与速率限制,提供重连与验证方法。
date: 2025-11-26
categories:
- 文章资讯
- 技术教程
---
概述
Subscriptions 支持服务向客户端实时推送。本文提供传输协议选择、后端 Pub/Sub 集成、过滤与授权、重连与速率限制,以及验证方法。
传输与协议(已验证)
- WebSocket:双向通信,支持丰富交互;
- SSE:单向推送,适合轻量场景;
- 协议:
graphql-ws/subscriptions-transport-ws(新项目建议前者)。
后端集成
- Pub/Sub:Kafka/Redis/NATS 等;
- Dataloader:批量获取相关数据,避免 N+1;
- 过滤:按用户/租户/主题过滤事件。
授权与治理
- 授权:在
connection_init与订阅解析处校验 JWT 与权限; - 速率限制:限制订阅数量与推送速率;
- 重连:指数退避与会话恢复。
示例(片段)
type Subscription {
orderUpdated(userId: ID!): OrderEvent
}
const resolvers = {
Subscription: {
orderUpdated: {
subscribe: (_, { userId }, ctx) => pubsub.asyncIterator(`order:${userId}`)
}
}
}
验证与监控
- 指标:连接数、订阅数、推送延迟与错误;
- 弱网模拟与重连行为验证;
常见误区
- 无授权与过滤导致数据泄漏;
- 推送风暴无速率限制;
结语
以合适的传输与后端 Pub/Sub、过滤与授权、速率控制与重连策略,并以指标与演练验证,GraphQL 实时推送可在复杂场景中稳定工作。

发表评论 取消回复