我的 Apollo 服务器上有 GraphQL 订阅,我想在用户注销后关闭它。最初的问题是我们是否应该在客户端或后端关闭此(套接字)连接。
在前端,我将 Angular 与 Apollo Client 结合使用,并通过Subscription从apollo-angular. 我可以使用典型的takeUntilrxjs 实现来关闭订阅通道:
this.userSubscription
.subscribe()
.pipe(takeUntil(this.subscriptionDestroyed$))
.subscribe(
({ data }) => {
// logic goes here
},
(error) => {
// error handling
}
);
但是,这不会关闭服务器上的 websocket,如果我是对的,这将导致订阅内存泄漏。
Apollo Server(和express)的订阅设置方式如下:
const server = new ApolloServer({
typeDefs,
resolvers,
subscriptions: {
onConnect: (connectionParams, webSocket, context) => {
console.log('on connect');
const payload = getAuthPayload(connectionParams.accessToken);
if (payload instanceof Error) {
webSocket.close();
}
return { user: payload };
},
onDisconnect: (webSocket, context) => {
console.log('on Disconnect');
}
},
context: ({ req, res, connection }) => {
if (connection) {
// set up context for subscriptions...
} else {
// set up context for Queries, Mutations...
}
console.log('on connect');当客户端注册新的 GraphQL 订阅时,我总是可以在服务器日志上看到,但console.log('on Disconnect');除非关闭前端应用程序,否则我永远看不到。
我还没有看到任何关于如何关闭 Apollo 订阅的 websocket 的示例。我主要是想完成一个Logout的实现。
我在这里错过了什么吗?提前致谢!
富国沪深
相关分类