如何知道 SERVER 端的 gRPC 函数处理程序中连接的真实地址(哪个 NIC)?
Posted
技术标签:
【中文标题】如何知道 SERVER 端的 gRPC 函数处理程序中连接的真实地址(哪个 NIC)?【英文标题】:How to know the real address(which NIC) is connected in a gRPC function handler on SERVER side? 【发布时间】:2021-03-15 04:29:26 【问题描述】:当我实现::grpc::Service
时,我应该实现虚函数。
如果我通过调用AddListeningPort
绑定所有地址(“0.0.0.0:50051”),如何获取每个gRPC调用的真实服务器IP?或者我怎么知道每个 gRPC 调用连接了哪个网卡? ServerContext
有什么线索吗?
谢谢。
grpc::Status DetectServicerImpl::Query(grpc::ServerContext* context, const Empty* request,
QueryResult* query_result)
exporter->QueryResult(query_result);
return grpc::Status::OK;
【问题讨论】:
【参考方案1】:您可以在 Java 中像这样在服务器拦截器中获取它:
public class CustomServerInterceptor implements ServerInterceptor
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next)
SocketAddress socketAddress = call.getAttributes()
.get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR);
// ...
而TRANSPORT_ATTR_REMOTE_ADDR
的值为remote-addr
【讨论】:
以上是关于如何知道 SERVER 端的 gRPC 函数处理程序中连接的真实地址(哪个 NIC)?的主要内容,如果未能解决你的问题,请参考以下文章