第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何在 Apollo 中關(guān)閉 GraphQL 訂閱的套接字連接

如何在 Apollo 中關(guān)閉 GraphQL 訂閱的套接字連接

qq_遁去的一_1 2023-11-02 21:51:58
我的 Apollo 服務(wù)器上有 GraphQL 訂閱,我想在用戶注銷后關(guān)閉它。最初的問題是我們是否應(yīng)該在客戶端或后端關(guān)閉此(套接字)連接。在前端,我將 Angular 與 Apollo Client 結(jié)合使用,并通過Subscription從apollo-angular. 我可以使用典型的takeUntilrxjs 實現(xiàn)來關(guān)閉訂閱通道:this.userSubscription  .subscribe()  .pipe(takeUntil(this.subscriptionDestroyed$))  .subscribe(    ({ data }) => {      // logic goes here    },    (error) => {      // error handling   });  但是,這不會關(guān)閉服務(wù)器上的 websocket,如果我是對的,這將導(dǎo)致訂閱內(nèi)存泄漏。Apollo Server(和express)的訂閱設(shè)置方式如下: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 訂閱時,我總是可以在服務(wù)器日志上看到,但console.log('on Disconnect');除非關(guān)閉前端應(yīng)用程序,否則我永遠看不到。我還沒有看到任何關(guān)于如何關(guān)閉 Apollo 訂閱的 websocket 的示例。我主要是想完成一個Logout的實現(xiàn)。我在這里錯過了什么嗎?提前致謝!
查看完整描述

1 回答

?
富國滬深

TA貢獻1790條經(jīng)驗 獲得超9個贊

本質(zhì)上,我們使用套接字創(chuàng)建訂閱的方式是使用subscriptions-transport-ws

export const webSocketClient: SubscriptionClient = new?

SubscriptionClient(

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

? {

? ? reconnect: true,

? ? lazy: true,

? ? inactivityTimeout: 3000,

? ? connectionParams: () => ({

? ? ? params: getParams()

? ? })

? }

);

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


webSocketClient.unsubscribeAll();

webSocketClient.close();


查看完整回答
反對 回復(fù) 2023-11-02
  • 1 回答
  • 0 關(guān)注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號