订阅的 GraphQLObjectType
Posted
技术标签:
【中文标题】订阅的 GraphQLObjectType【英文标题】:GraphQLObjectType for subscriptions 【发布时间】:2020-09-23 13:48:19 【问题描述】:我使用 Express 实现了一个 GraphQL 服务器,但我在设置 GraphQL 订阅类型时遇到了问题。
我正在开发一个实时聊天应用程序,并尝试在创建新消息后发布事件,但我不明白如何为订阅创建 GraphQLObjectType。
我尝试使用“graphql-subscriptions”中的 PubSub 和 WithFilter,但我不知道该怎么做。
const pubsub = new PubSub();
const NEW_MESSAGE = 'NEW_MESSAGE';
const Subscription = new GraphQLObjectType(
name: 'Subscription',
fields: () => (
newMessage:
subscribe: withFilter(() => pubsub.asyncIterator(NEW_MESSAGE), (payload, args) =>
return payload.recipientId === args.recipientId;
),
**type: ?**
)
);
这是我创建的 MessageType:
const MessageType = new GraphQLObjectType(
name: 'Message',
fields: () => (
id: type: GraphQLID ,
message: type: GraphQLString ,
senderId: type: GraphQLID ,
recipientId: type: GraphQLID
)
);
还有 sendMessage 突变:
const Mutation = new GraphQLObjectType(
name: 'Mutation',
fields: () => (
sendMessage:
type: MessageType,
args:
message: type: GraphQLString ,
senderId: type: GraphQLID ,
recipientId: type: GraphQLID
,
resolve: (parent, args) =>
const message, senderId, recipientId = args;
const msg = new Message( message, senderId, recipientId );
pubsub.publish(NEW_MESSAGE,
recipientId,
newMessage: message
);
return msg.save();
)
);
【问题讨论】:
【参考方案1】:我使用订阅的方式是创建订阅服务器并在客户端订阅它。看看这个你就明白了。 https://youtu.be/r5KY5m5OXsI
【讨论】:
请保留答案字段以获得完整的信息解决方案。如果您有参考链接,请直接在您的答案中发布该链接中的相关信息。请注意,链接可能会过时。 @Ronald 我知道,但它是 YouTube 视频的链接,所以我发布了它。以上是关于订阅的 GraphQLObjectType的主要内容,如果未能解决你的问题,请参考以下文章
EventBus手写实现事件通信框架 ( 订阅类-订阅方法缓存集合 | 事件类型-订阅者集合 | 订阅对象-事件类型集合 )
ReactiveCocoa 冷热订阅(cold subscribe, hot subscribe)