以下是一个简单的brpc使用示例:
首先,需要安装并配置好brpc框架。
- 创建一个文件名为hello_world.proto的proto文件,内容如下:
syntax = "proto2";
package brpc.demo;
message Request {
required string name = 1;
}
message Response {
required string message = 1;
}
service HelloWorld {
rpc SayHello(Request) returns (Response);
}
- 使用protobuf编译器生成C++代码:
protoc -I=. --cpp_out=. hello_world.proto
- 编写server.cpp代码:
#include <butil/logging.h>
#include <brpc/server.h>
#include "hello_world.pb.h"
namespace brpc_demo {
class HelloWorldServiceImpl : public brpc::HelloWorld {
public:
void SayHello(google::protobuf::RpcController* cntl,
const brpc::Request* request,
brpc::Response* response,
google::protobuf::Closure* done) override {
const std::string& name = request->name();
response->set_message("Hello, " + name);
done->Run();
}
};
} // namespace brpc_demo
int main() {
// 初始化日志库
butil::AtExitManager exit_manager;
if (butil::FLAGS_minloglevel > 0) {
butil::SetLogLevel(butil::FLAGS_minloglevel - 1);
}
// 创建和启动服务器
brpc::Server server;
brpc_demo::HelloWorldServiceImpl hello_service_impl;
if (server.AddService(&hello_service_impl,
brpc::_SERVICE_NAME(brpc_demo::HelloWorld)) != 0) {
LOG(ERROR) << "Failed to add HelloWorld service";
return -1;
}
brpc::ServerOptions options;
if (server.Start(50051, &options) != 0) {
LOG(ERROR) << "Failed to start server";
return -1;
}
server.RunUntilAskedToQuit();
return 0;
}
- 编写client.cpp代码:
#include <butil/logging.h>
#include <brpc/channel.h>
#include "hello_world.pb.h"
int main() {
// 初始化日志库
butil::AtExitManager exit_manager;
if (butil::FLAGS_minloglevel > 0) {
butil::SetLogLevel(butil::FLAGS_minloglevel - 1);
}
// 创建和初始化Channel对象
brpc::Channel channel;
if (channel.Init("127.0.0.1:50051", nullptr) != 0) {
LOG(ERROR) << "Fail to initialize channel";
return -1;
}
// 定义请求和响应对象
brpc_demo::Request request;
brpc_demo::Response response;
request.set_name("World");
// 发起RPC调用
brpc::Controller cntl;
brpc_demo::HelloWorld_Stub stub(&channel);
stub.SayHello(&cntl, &request, &response, nullptr);
// 处理响应结果
if (cntl.Failed()) {
LOG(ERROR) << "Fail to send RPC";
return -1;
} else {
LOG(INFO) << "Received message: " << response.message();
}
return 0;
}
- 编译并运行server.cpp和client.cpp。
这个示例展示了如何创建一个简单的HelloWorld服务,server.cpp作为服务端代码,client.cpp作为客户端代码。运行server.cpp启动服务,在客户端发起RPC调用,并打印响应结果。
以上是一个基本的brpc使用示例,你可以根据自己的需求进行进一步开发和扩展。
内容由零声教学AI助手提供,问题来源于学员提问