亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Apollo 中關閉 GraphQL 訂閱的套接字連接

如何在 Apollo 中關閉 GraphQL 訂閱的套接字連接

qq_遁去的一_1 2023-11-02 21:51:58
我的 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的實現。我在這里錯過了什么嗎?提前致謝!
查看完整描述

1 回答

?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

本質上,我們使用套接字創建訂閱的方式是使用subscriptions-transport-ws

export const webSocketClient: SubscriptionClient = new?

SubscriptionClient(

? `${environment.WS_BASE_URL}/graphql`,

? {

? ? reconnect: true,

? ? lazy: true,

? ? inactivityTimeout: 3000,

? ? connectionParams: () => ({

? ? ? params: getParams()

? ? })

? }

);

正如問題中所指定的,我想在用戶注銷之前取消訂閱所有頻道并關閉訂閱套接字連接。我們通過webSocketClient在注銷函數中使用 SubscriptionClient 來完成此操作并調用:


webSocketClient.unsubscribeAll();

webSocketClient.close();


查看完整回答
反對 回復 2023-11-02
  • 1 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號