GraphQLの購読[作成中]
5743 ワード
WebSocket
GraphQLの速博応用はWebSocketに基づいて実現された.
既存のHTTPは無接続と無状態の特徴がある.クライアントが要求を発行する場合、サーバは一方向通信、すなわち応答し、直ちに接続を切断する必要があります.
Socket通信では、HTTPとは異なり、クライアントがサーバ、サーバにクライアントに要求を送信する双方向通信が静的な通信方法である.リアルタイム通信が必要な場合に使用するには、接続を維持する接続向けが必要です.(ストリーミング処理、オンラインゲームなどでよく使われる)
現在、WebSocketは、WebサーバとWebブラウザのリアルタイム双方向通信環境を提供するリアルタイム通信技術である.最初の接続時に接続を維持し、接続が切断されるまで、プロトコルはWSを使用します.
Webスロットの機能
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'
}
});
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/41Reference
この問題について(GraphQLの購読[作成中]), 我々は、より多くの情報をここで見つけました https://velog.io/@pixelstudio/GraphQL의-구독Subscriptionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol