有没有connecton信息可以帮助区分客户。原因之一是代理:不同的客户端可以具有相同的 IP 和端口(据我所知)
一种可能的解决方案是应用程序级别的握手协议。您可以添加 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);
Run Code Online (Sandbox Code Playgroud)
此 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());
}
Run Code Online (Sandbox Code Playgroud)
我注意到元数据键不区分大小写。Grpc 将键转换为小写。
| 归档时间: |
|
| 查看次数: |
8716 次 |
| 最近记录: |