0
サーバー側からのRPC呼び出しに関する接続情報を取得する方法はありますか?または、一意のクライアントIDのようなものでしょうか?GRPC:クライアントIDまたは接続情報?
サーバー側からのRPC呼び出しに関する接続情報を取得する方法はありますか?または、一意のクライアントIDのようなものでしょうか?GRPC:クライアントIDまたは接続情報?
クライアントを区別するのに役立つno connecton informationがあります。その理由の1つはプロキシです:異なるクライアントが同じIPとポートを持つことができます(私が理解したとおり)
可能な解決策の1つは、アプリケーションレベルのハンドシェイクプロトコルです。 rpcメソッド "Connect"を追加し、clientIdをサーバーからの応答として送信することができます。その後、カスタムヘッダー(メタデータ)をRPC呼び出しに添付することができます。
クライアントサイドJavaコード:
String clientId = getIdfromServer();
Metadata.Key<String> CLIENT_ID = Metadata.Key.of("client_id", ASCII_STRING_MARSHALLER);
Metadata fixedHeaders = new Metadata();
fixedHeaders.put(CLIENT_ID, clientId);
blockingStub = MetadataUtils.attachHeaders(blockingStub, fixedHeaders);
このC++、サーバー側のコードは、サーバー上で、このようなヘッダを処理する方法を示しています。
::grpc::Status YourRPC(::grpc::ServerContext* context, const Your* request, YourResponse* response)
{
const auto clientMetadata = context->client_metadata();
auto it = clientMetadata.find("client_id");
auto clientId = std::string(it->second.begin(), it->second.end());
}
私は、メタデータのキーは大文字と小文字が区別されていることに気づきました。 Grpcはキーを小文字に変換します。
作業中のプログラミング言語に応じて、これは現在または「近日中に」可能性があります。どのようなプログラミング言語でgRPCを使って作業していますか? –
私はC++とRustを使用しています(非公式のRustポートhttps://github.com/stepancheg/grpc-rust、まだサポートしていないと思います) –
達成したいのは何ですか?通常、クライアントIDを使用した設計は壊れています。 –