第5回は、Node.jsでストリーミング型のgRPCサービスを開発してみます。ここでは、ストリーミング型のうちクライアントからの複数リクエストとなるクライアントサイドストリーミングを実装してみます。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
今回のテーマは、Node.js(JavaScript)によるクライアントサイドストリーミング型のgRPCサービスです。gRPCでは、4つの通信方式を使うことができますが、このうちクライアントサイドストリーミングとは、図1のように複数のリクエストに対して一つのレスポンスが返るという通信方式です。
同種のメッセージ、例えばユーザー情報といったものを大量にサーバに送信してデータベースに登録する必要があるとします。それらを一つの大きなメッセージとして送信するのではなく、個々のメッセージとして送信して、サーバからはトータルでの処理結果をメッセージとして受け取るというイメージです。
同種のメッセージをまとめて送るには、リクエストのメッセージにrepeatedキーワードを付与して配列にするという方法があります。ただし、この場合はあくまでも一つのメッセージであることには変わりがないので、全てのメッセージを送信し終わるまで(サーバではそれらを全て受け取るまで)プログラムの実行がブロックされてしまいます。メッセージのサイズによってはパフォーマンスに悪影響が出ることが考えられます。
クライアントサイドストリーミングを指定することで、個々のメッセージは非同期に送信されるようになります。大量のメッセージの送信でも処理待ちを最小限に抑えることで、パフォーマンスの悪化を防ぐことができます。
開発に必要な環境を準備しておきます。なお、あくまでも学習用としての位置付けなので、サーバとクライアントは同じホストに配置することにして、開発環境は共通とします。
本連載で共通で使用するコードエディタVisual Studio Code(以降、VSCode)と、汎用(はんよう)のgRPCクライアントであるEvans(インストールと利用方法については連載第2回を参照)。そしてNode.jsの実行環境をインストールしておいてください。
gRPCの公式サイトによると、gRPCの利用が可能なNode.jsの本稿作成時点におけるバージョンは8.13.0以降です。インストールされていないか、バージョンが古い場合には最新バージョンをインストールしてください。Node.jsのインストールは、macOS/Windowsともに公式サイトからインストーラを入手して実施してください。
Copyright © ITmedia, Inc. All Rights Reserved.