Graph QL Subscriptions
GraphQL-Subscriptions
#resource / graphql
#type / concept
#status / growing
GraphQL-Subscriptions
基础概念
原理
基于 GraphQL 的实时订阅机制,通常底层使用 WebSocket。
技术特点
- 协议:GraphQL over WebSocket
- 数据查询:结构化查询
- 类型安全:强类型系统
- 订阅管理:声明式订阅
优点
- 类型安全
- 灵活的数据查询
- 标准化的实时通信
- 良好的开发体验
缺点
- 学习成本高
- 需要 GraphQL 基础设施
- 相对复杂的设置
使用指南
实现示例
服务器端(Apollo Server):
const { ApolloServer, gql, PubSub } = require('apollo-server');
const pubsub = new PubSub();
const typeDefs = gql`
type Reminder {
id: ID!
title: String!
message: String!
timestamp: String!
}
type Subscription {
reminderTriggered: Reminder
}
`;
const resolvers = {
Subscription: {
reminderTriggered: {
subscribe: () => pubsub.asyncIterator(['REMINDER_TRIGGERED'])
}
}
};
// 触发提醒
function triggerReminder(reminder) {
pubsub.publish('REMINDER_TRIGGERED', {
reminderTriggered: reminder
});
}
客户端:
import { gql, useSubscription } from '@apollo/client';
const REMINDER_SUBSCRIPTION = gql`
subscription OnReminderTriggered {
reminderTriggered {
id
title
message
timestamp
}
}
`;
function ReminderComponent() {
const { data, loading } = useSubscription(REMINDER_SUBSCRIPTION, {
onSubscriptionData: ({ subscriptionData }) => {
const reminder = subscriptionData.data?.reminderTriggered;
if (reminder) {
showNotification(reminder);
}
}
});
return <div>监听提醒中...</div>;
}
适用场景
- 已使用 GraphQL 的项目
- 复杂的实时数据查询需求
- 需要类型安全的项目