未使用的 gRPC ServerContext

Unused gRPC ServerContext

我是 gRPC 的新手,正在尝试在我现有的系统中使用它。但是,我在编译时遇到了这个未使用的参数错误。

server_grpc.cc:100:39: error: unused parameter ‘context’[-Werror=unused-parameter]
    Status MyFunc(ServerContext* context, const QueryRequest* request,

可能在其他一些情况下使用了上下文参数。但是,在简单的 hello world 类型的示例中,它没有被使用。有没有办法在不生成 ServerContext 参数的情况下编译协议缓冲区?

我知道我可以让编译器忽略警告消息。但是,只是想知道是否可以在不影响我的系统现在正在编译的方式的情况下完成。

我想知道上下文是如何使用的?如果有人可以提供有关如何使用此上下文的指示,那就太好了。我可能会在我的工作中找到它的用处。

提供 ServerContext 是为了为您获得的每个 RPC 添加上下文。它允许您调整 RPC 的某些方面,例如处理身份验证,或将元数据添加到您返回给客户端的响应中。显然,您可能需要也可能不需要该参数,具体取决于您的需要。

我们不想专门为此添加一个选项,因为这会使代码和工具变得复杂,但收效甚微,因此代码生成器和函数签名强制您始终拥有该参数。现在这没什么大不了的,因为在 C++ 中,您可以特别要求编译器忽略特定实例中的参数,例如:

  Status SayHello(ServerContext* context, const HelloRequest* request,
                  HelloReply* reply) override {
    (void) context; // ignore that variable without causing warnings
    std::string prefix("Hello ");
    reply->set_message(prefix + request->name());
    return Status::OK;
  }

这就是我建议您在特定情况下处理该警告的方式,而不会导致您的整个项目未启用警告。