GraphQLの購読[作成中]

5743 ワード

WebSocket


GraphQLの速博応用はWebSocketに基づいて実現された.
既存のHTTPは無接続と無状態の特徴がある.クライアントが要求を発行する場合、サーバは一方向通信、すなわち応答し、直ちに接続を切断する必要があります.
Socket通信では、HTTPとは異なり、クライアントがサーバ、サーバにクライアントに要求を送信する双方向通信が静的な通信方法である.リアルタイム通信が必要な場合に使用するには、接続を維持する接続向けが必要です.(ストリーミング処理、オンラインゲームなどでよく使われる)

現在、WebSocketは、WebサーバとWebブラウザのリアルタイム双方向通信環境を提供するリアルタイム通信技術である.最初の接続時に接続を維持し、接続が切断されるまで、プロトコルはWSを使用します.
Webスロットの機能
  • wsプロトコル
  • を使用
  • 最初の接続ではhttpまたはhttps接続を使用し、wsプロトコルを使用して通信します.
  • http、ws(80)ポート、およびhttps、wss(443)ポートをサポートします.
  • wss httpsのようにssl証明書を使用するプロトコル
  • GraphQLの速博応用


    GraphQLには、クエリー、書き込み、変更、削除、およびリアルタイムアプリケーションを実装するための速博アプリケーションが含まれます.Query/Mutationは従来のサーバ/クライアントモードに従い、SubScriptionはPublish/Subscribeモードに従う.
    速博アプリケーションはWebSocketに基づいてリアルタイム双方向通信機能を提供する.サブスクリプションにより、特定のイベントが発生したときにサーバからクライアントにデータをリアルタイムで通信します.

    速博応用の行為方式


    Subscriptionは、最初のユーザがMutationリクエストを発行すると、ノードサーバのResolver内部でPublish Eventを実行し、Event Busに通知します.その後、Subscriberにイベントが発生したことを通知します.

    pubsubイベントのパブリッシュ

    pubsub.publish('POST_CREATED', {
      postCreated: {
        author: 'Ali Baba',
        comment: 'Open sesame'
      }
    });
  • 最初の列挙変数作成イベントラベル名
  • の2番目のパラメータは、イベントに関連するペイロードである.
  • POST_CREATEDという名前のTriggerNameを名前で購読すると、

    NestJSでの実際の合成例

    @Mutation(returns => Post)
    async addComment(
      @Args('postId', { type: () => Int }) postId: number,
      @Args('comment', { type: () => Comment }) comment: CommentInput,
    ) {
      const newComment = this.commentsService.addComment({ id: postId, comment });
      pubSub.publish('commentAdded', { commentAdded: newComment });
      return newComment;
    }

    pubsubイベントの購読


    QueryまたはMutationでは簡単な関数が必要ですが、サブスクリプションにはsubscribe属性を持つオブジェクトが必要です.PubsubオブジェクトのasyncIterator()メソッドのパラメータを使用してアクティビティ名(String)を作成すると、サブスクリプションはその名前のイベントが発生したときに反応します.
    pubsub.asyncIterator('commentAdded')
    ref: https://www.daleseo.com/graphql-apollo-server-subscriptions/ , https://chanyeong.com/blog/post/41