gpt4 book ai didi

apollo - 在 Apollo graphql 服务器中检测取消订阅

转载 作者:行者123 更新时间:2023-12-03 23:28:15 28 4
gpt4 key购买 nike

在 Apollo 服务器中,当客户端用户订阅订阅(使用 WebSocket)时,我们可以使用订阅解析器检测到这一点。

但是有没有办法检测取消订阅?
我看到 WebSocket 发送了一个 {"id": "1", "type": "stop"}消息,但我不知道如何捕获这个

所以我不想知道用户何时从 Websocket 断开连接,而是用户何时取消订阅 Apollo 客户端的订阅。

最佳答案

我遇到了同样的问题,不敢相信这不是 GraphQL 内置的,也不是包含在文档中的。

我在 github 问题中找到了解决方案,您可以阅读 here

我修复它的方式是:

添加了 withCancel我的解析器的功能:

const withCancel = (asyncIterator, onCancel) => {
const asyncReturn = asyncIterator.return;

asyncIterator.return = () => {
onCancel();
return asyncReturn ? asyncReturn.call(asyncIterator) : Promise.resolve({ value: undefined, done: true });
};

return asyncIterator;
};

然后在我的订阅中使用它:
Subscription: {
update: {
subscribe: (root, { id, topic }, ctx, info) => {
logger.info(`start new subscription for ${id}`);
ActiveMQ(id, topic);

return withCancel(pubsub.asyncIterator(id), () => {
console.log(`Subscription closed, do your cleanup`);
});
},
resolve: payload => {
return payload;
},
},
}

然后我在 withCancel 提供的回调中处理了我的逻辑,这对我来说是关闭 stomp 客户端并清理事件订阅者列表等

关于apollo - 在 Apollo graphql 服务器中检测取消订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56886412/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com