syntax = "proto3";
package example;
立即学习“C++免费学习笔记(深入)”;
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
service Greeter {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
protoc --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` helloworld.proto
#include
#include "helloworld.grpc.pb.h"
class GreeterServiceImpl final : public example::Greeter::Service {
grpc::Status SayHello(grpc::ServerContext context,
const example::HelloRequest request,
example::HelloResponse* response) override {
response->set_message("Hello, " + request->name());
return grpc::Status::OK;
}
};
void RunServer() {
std::string server_address("0.0.0.0:50051");
GreeterServiceImpl service;
grpc::ServerBuilder builder;
builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
builder.RegisterService(&service);
std::unique_ptr server = builder.BuildAndStart();
std::cout << "Server listening on " << server_address << std::endl;
server->Wait();
}
#include "helloworld.grpc.pb.h"
#include
void SayHello(const std::string& user) {
grpc::ChannelArguments args;
std::shared_ptr channel =
grpc::CreateCustomChannel("localhost:50051",
grpc::InsecureChannelCredentials(), args);
std::unique_ptr stub = example::Greeter::NewStub(channel);
example::HelloRequest request;
request.set_name(user);
example::HelloResponse response;
grpc::ClientContext context;
grpc::Status status = stub->SayHello(&context, request, &response);
if (status.ok()) {
std::cout << "Reply: " << response.message() << std::endl;
} else {
std::cout << "RPC failed: " << status.error_message() << std::endl;
}
}
find_package(Protobuf REQUIRED)
find_package(gRPC REQUIRED)
add_executable(server server.cpp helloworld.pb.cc helloworld.grpc.pb.cc)
target_link_libraries(server ${gRPC_LIBRARIES} ${PROTOBUF_LIBRARIES})
target_include_directories(server PRIVATE ${gRPC_INCLUDE_DIRS} ${PROTOBUF_INCLUDE_DIRS})
