要从服务器通知订阅者,可以使用阿波罗(Apollo)的服务器端推送(Server Push)功能。以下是一个使用Node.js和Apollo-Server的示例代码:
npm install apollo-server-express express
const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');
// 定义GraphQL类型和查询
const typeDefs = gql`
type Subscription {
message: String
}
`;
// 定义订阅解析器
const resolvers = {
Subscription: {
message: {
subscribe: () => {
// 返回一个生成器,用于向客户端推送消息
return messageGenerator();
},
},
},
};
// 生成器函数,用于向客户端推送消息
function* messageGenerator() {
let i = 0;
while (true) {
yield { message: `Server Push Message ${i++}` };
// 每隔1秒推送一条消息
yield new Promise(resolve => setTimeout(resolve, 1000));
}
}
const server = new ApolloServer({
typeDefs,
resolvers,
});
const app = express();
server.applyMiddleware({ app });
// 启动服务器
app.listen({ port: 4000 }, () =>
console.log(`Server ready at http://localhost:4000${server.graphqlPath}`)
);
http://localhost:4000/graphql
,可以使用GraphQL Playground进行测试。在右侧的订阅面板中,订阅message
字段即可接收到服务器推送的消息。每隔1秒钟,服务器将向所有订阅者发送一条新的消息。这是一个基本的示例,你可以根据自己的需求进行扩展和定制。