grpc - 如何在连接的 grpc 客户端中获取 IP 地址?
问题描述
我试图建立一个像这样的grpc频道:
grpc::CreateCustomChannel(serverIP + ":" + serverPort, grpc::SslCredentials(sslOptions), args);
我猜 grpc 在内部为 grpc 客户端绑定了一个 IP。
现在,我怎样才能获得客户端的绑定IP?
解决方案
您应该添加一个服务器拦截器并查看远程地址属性。
就像是
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(final ServerCall<ReqT, RespT> call,
final Metadata headers,
final ServerCallHandler<ReqT, RespT> next) {
if (call.getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR) != null) {
final InetSocketAddress remoteAddress = (InetSocketAddress) call.getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR);
if (remoteAddress == null) {
throw DeviceModuleException.create(null,"Could not get remote address of grpc client");
}
final Context context = Context.current().withValue(ORIGIN_IP, remoteAddress.getHostName());
return Contexts.interceptCall(context, call, headers, next);
}
return next.startCall(call, headers);
}
推荐阅读
- javascript - 高性能坐标系 - Three.js
- ios - SwiftUI:如何更改 NavigationView 的色调(背景颜色)?
- javascript - 如何修复客户可变背景图像更改
- css - Material-UI How to set minWidth and maxWidth of MenuItem (popover) according to the width of the select component
- c# - Cause of 'SqlTransaction has completed' error
- c# - HttpContext.User.Claims 控制器基础中的零元素
- android - What is SystemClock.elapsedRealtime - millisecond?
- sql - 具有不同行名的 SQL INNER JOIN 表
- sql - SQL 查询以查找目录路径的最后一段
- xamarin - 我应该使用 bundle_green 在手机上连接到 SQLite