增量流式订阅:实现大规模实时数据推送(非WebSocket)
基于 Server-Sent Events (SSE) 与增量推送模式,构建低延迟、高吞吐的 GraphQL 订阅,避免传统 WebSocket 的复杂握手。 · 难度:入门 · +10XP
增量流式订阅:实现大规模实时数据推送(非WebSocket)
大部分 GraphQL 订阅教程使用 WebSocket,但 SSE 在某些场景(如日志流、监控指标)更轻量。本教程将指导你利用 'graphql-sse' 库在 Node.js 中实现支持多查询的流式订阅,并引入 '增量推送' 概念:客户端仅接收变更字段的增量数据(类似 JSON Patch),而非全量对象,显著降低带宽。我们将自定义一个 'AsyncIterator' 读取事件源(如 Kafka),通过 'withFilter' 实现游标式重连,最终基于 Express 提供 SSE 端点。
const { createHandler } = require('graphql-sse');
const express = require('express');
const app = express();
app.use('/graphql/stream', createHandler({ schema: mySchema }));
// 增量推送示例:只发送变更字段
const patch = { op: 'replace', path: '/price', value: 9.99 };
pubsub.publish('PRODUCT_UPDATED', { productChanged: patch });