我正在浏览指南和文档,但是对惯用的C ++编程并不十分熟悉。在我所看到的所有服务器实现案例中,响应grpc::Status::OK
在RPC实现结束时返回,例如:
(来自https://github.com/grpc/grpc/blob/master/examples/cpp/helloworld/greeter_server.cc)
class GreeterServiceImpl final : public Greeter::Service {
Status SayHello(ServerContext* context, const HelloRequest* request,
HelloReply* reply) override {
std::string prefix("Hello ");
reply->set_message(prefix + request->name());
return Status::OK;
}
};
是否总是返回Status :: OK的预期实施模式?在失败情况下(例如未找到对请求资源的404响应),您还应返回其他选项吗?
还是希望您将相关的错误条件编码为自己的原始消息,并始终以可能包含错误详细信息的消息进行答复?
我认为文档反映出还可以返回其他状态代码(例如,NOT_FOUND),但是当我尝试获取编译错误时:
No member named 'NOT_FOUND' in 'grpc::Status'; did you mean 'grpc::NOT_FOUND'?
如果我不返回grpc::NOT_FOUND
,则该方法不喜欢它,因为它是不兼容的类型。
答案 0 :(得分:1)
您可以通过使用代码和消息创建Status()来返回显式生成的状态,例如:
return grpc::Status(grpc::StatusCode::NOT_FOUND, "error details here");
并返回该值而不是Status::OK
来发送错误消息;