You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo GraphQL服务端事件最佳实践及subscriptions/SSE配置相关问题

Apollo Server 3 subscriptions/SSE配置及相关问题解答

1. 公认配置最佳实践

Apollo 3起官方将订阅相关能力从核心包中拆分出来,不再默认内置,根据使用场景可分为两类方案:

  • WebSocket方案(需要双工通信场景)
    优先选用仍在维护的graphql-ws库,弃用已经停止迭代的subscription-transport-ws:
    1. 安装必要依赖:graphql-subscriptions(官方拆分出的PubSub实现)、graphql-ws、ws、@graphql-tools/schema
    2. 先用makeExecutableSchema拼接好你的typeDefs和resolvers
    3. 启动Express服务时单独启动WebSocket服务,监听HTTP服务的upgrade事件,绑定拼接好的schema即可完成接入
    4. 生产环境不要用默认的内存版PubSub,仅适合单实例调试,多实例部署需替换为Redis、RabbitMQ等分布式消息中间件对应的PubSub实现
  • SSE方案(仅服务端单向推送场景,适配你的打印需求)
    Apollo 3+原生支持SSE订阅,无需额外安装WebSocket相关依赖,仅需要在初始化ApolloServer时添加配置项subscriptions: { path: '/graphql/stream' }即可启用,SSE方案没有WebSocket的跨域、反向代理适配问题,配置复杂度更低,更匹配你单向推送打印请求的业务场景。

2. 原有HTTP接口兼容性

接入订阅功能完全不会影响原有基于HTTP的query和mutation接口,两种能力走完全独立的请求链路,仅会复用你定义的schema、resolver和上下文逻辑,原有接口不需要做任何改造即可正常使用。

3. Playground调试支持

目前Apollo官方的Playground(新版叫Apollo Sandbox)已经原生支持两种订阅模式的调试:

  • WebSocket订阅:只要服务端配置的WebSocket路径和端口与HTTP服务一致,Sandbox会自动检测到订阅能力,编写subscription查询后点击运行即可自动建立WebSocket连接接收数据
  • SSE订阅:v3.9及以上版本的Sandbox已经原生支持SSE流调试,服务端开启SSE订阅路径后会自动识别,直接运行查询即可接收推送
  • 若使用旧版Playground,仅需要在设置项中手动填写subscriptionEndpoint为你的订阅服务地址即可正常调试。

内容的提问来源于stack exchange,提问作者Magnus Brusletto Berntsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:06:03