如何解决如何知道服务器端的 gRPC 函数处理程序中连接的真实地址哪个 NIC?
当我实现一个 ::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;
}
解决方法
你可以像这样在 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。