---

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 实时推送可在复杂场景中稳定工作。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部