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 的项目
  • 复杂的实时数据查询需求
  • 需要类型安全的项目

实战经验

经验总结

信息参考

创建于 2025/1/1 更新于 2026/5/27