2016-08-19 2 views
0

gRPC를 처음 사용하고 기존 시스템에서 사용하려고합니다. 그러나 컴파일하는 동안이 사용하지 않은 매개 변수 오류가 발생합니다.사용하지 않은 gRPC ServerContext

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

아마도 다른 경우에는 컨텍스트 매개 변수가 사용됩니다. 그러나 간단한 예제에서는 hello world 유형이 사용되지 않습니다. ServerContext 매개 변수를 생성하지 않고 프로토콜 버퍼를 컴파일하는 방법이 있습니까?

컴파일러에서 경고 메시지를 무시하도록 만들 수 있습니다. 하지만, 지금 내 시스템이 컴파일되는 방식에 영향을 미치지 않고 이것이 가능할 지 궁금합니다.

컨텍스트가 어떻게 사용되는지 알고 싶습니다. 아무도이 컨텍스트를 사용하는 방법에 대한 지침을 줄 수 있다면 좋을 것입니다. 나는 내 일에 그것을 사용할 수 있습니다.

답변

0

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; 
    } 

을 그리고 그 어떻게 좋겠입니다 전체 프로젝트에서 경고를 사용하도록 설정하지 않고 특정 인스턴스에서 해당 경고를 처리하도록 제안합니다.

+0

설명해 주셔서 감사합니다. gRPC 문서가이 컨텍스트를 사용하는 예제를 조금 더 향상시켜주기를 바랍니다. – damleak

관련 문제