我的 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的實現。我在這里錯過了什么嗎?提前致謝!
如何在 Apollo 中關閉 GraphQL 訂閱的套接字連接
qq_遁去的一_1
2023-11-02 21:51:58