grpc入門②:クロスプラットフォーム環境で通信してみよう

grpc入門編の第二回目となる今回は、異なるOS, 異なるプログラミング言語を使用したクロスプラットフォーム環境での通信を試そうと思います。

今回実施することは、下図のような感じでHyper-Vで作ったUbuntu環境上にサーバーをたてて、Windows C++クライアント環境から通信します。

grpc_img

環境構築

手近なところにLinux環境がないので、Hyper-VでUbuntu環境を作成します。

Ubuntu環境が作れれば何でもいいので、VMWareやWSL、実機でも問題ありません。

Hyper-VによるUbuntu環境構築

  1. スタートメニューから「Hyper-V クイック作成」をクリックして起動
    Windows10 HomeではHyper-V使えないそうなので、WSLやVMWareなどを使いましょう。
    (僕はHyper-Vを使うためにWindows11へアップデードしました)
  2. Ubuntu 22.04 LTSを選択して仮想マシンの作成をクリック
    1724069882542
  3. 仮想マシンを起動し初期セットアップを実施
    特に迷うところはないと思うので画面通りに進めましょう

Ubuntuにgrpc環境構築

UbuntuでのPython環境構築は、公式ドキュメント通りに簡単にセットアップできます。

  1. UbuntuでTerminalを開いて下記のコマンドを順番に実行
    // pip3系をインストール、標準でインストールされていたらスキップ
    sudo apt install python3-pip
    
    // pip3のアップグレード、UbuntuではPython3系を呼び出すコマンドはpython3
    python3 -m pip install --upgrade pip
    
    // grpcのインストール
    python3 -m pip install grpcio-tools
    
    //gitをインストール、標準でインストールされていたらスキップ
    sudo apt install git
    
    // gprcリポジトリをクローン
    git clone -b v1.64.0 --depth 1 --shallow-submodules https://github.com/grpc/grpc
    
    // テストコードフォルダへCD
    cd grpc/examples/python/helloworld
    
    // サーバー側の処理を実行
    python3 greeter_server.py
    
    // 新たなターミナルを実行し、テストコードフォルダへCD
    // その後、クライアント側の処理を実行
    python3 greeter_client.py
    
  2. 下図のようにクライアント実行時にそれっぽい文言が表示されたらgrpcの環境構築完了です
    1724077322592

C++ Windows Clientと通信

本題の異なる言語、OS間での通信についてWindows C++クライアントとUbuntu Pythonサーバーで通信します。

といっても、前回C++環境を作ったもののIP設定を変更するだけです。

もし、C++環境を作っていなければ前回の記事を見てください。

  1. 前回作成したgreeter_client.ccのIP部を修正
    ABSL_FLAG(std::string, target, "localhost:50051", "Server address");
    

    localhostとなっているところを、Ubuntu環境のIPに書き換えましょう。

  2. 再ビルド
    前回同様、Buildフォルダ上で下記のコマンドでも.slnファイルを開いてVisualStudioからGUIでビルドしてもokです。

    cmake --build .
    
  3. (起動していなければ)Ubuntu側のサーバーを起動
    python3 greeter_server.py
    
  4. ビルドで生成されたclient.exeを実行
    下の動画のようにできていたら成功です!

終わりに

今回は異なるOS, 言語によるgrpcを使った通信について試してみました。

grpcを使うと結構簡単にリモートPCの操作ができますね。

次回はprotocol bufferを使った、独自通信インターフェースの作り方について書こうと思います。