我试图建立这样的grpc频道:
grpc::CreateCustomChannel(serverIP + ":" + serverPort, grpc::SslCredentials(sslOptions), args);
我猜想grpc在内部为grpc客户端绑定了IP。
现在,如何才能获得客户端的绑定IP?
答案 0 :(得分:0)
您应该添加服务器拦截器并查看remote addr属性。
类似
@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);
}