C++ アプリ (gRPC サーバー) と Java アプリ (gRPC クライアント) の間のプロセス間通信に gRPC を使用しています。すべてが 1 台のマシンで実行されます。サーバーをシャットダウンするクライアントの可能性を提供したいと考えています。私の考えは、それを行うprotoでサービスにRPC機能を追加することです。
C++ 実装は次のようになります。
class Service : public grpcGeneratedService
{
public:
......
private:
grpc::Server* m_pServer;
};
grpc::Status Service::ShutDown(grpc::ServerContext* pContext, const ShutDownRequest* pRequest, ShutDownResponse* pResponse)
{
if (m_pServer)
m_pServer->Shutdown();
return grpc::Status(grpc::StatusCode::OK, "");
}
ただし、すべての RPC 呼び出しが処理されるまで ShutDown がブロックされるため、デッドロックが発生します。それを実装するエレガントな方法はありますか?