摘要:cd example/echo_c++/cmake -B build && cmake --build build# 运行服务./build/echo_server 运行客户端./build/echo_client$ cat test.protosynt
#RPC#据说brpc性能强悍,功能完整。这里体验下。
bRPC官网
本文结合介绍如何在Ubuntu下基于源码构建bRPC,并基于C++开发开发服务端和客户端应用。
$ lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubuntu 24.04.3 LTSRelease: 24.04Codename: noble下载bRPC依赖的工具与第三方库
# M 更新软件源缓存sudo apt update# M 安装brpc依赖sudo apt-get install -y git g++ make libssl-dev libgflags-dev libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev# M 安装glog,否则一些例子程序跑不起来sudo apt install -y libgoogle-glog-dev# O 静态连接leveldbsudo apt-get install -y libsnappy-dev# O 启用profilesudo apt-get install -y libgoogle-perftools-dev# O 运行测试sudo apt-get install -y cmake libgtest-dev && cd /usr/src/gtest && sudo cmake . && sudo make && sudo mv lib/libgtest* /usr/lib/ && cd -下载源码,执行构建
# 可直接官网下载最新版本的源码包apache-brpc-1.14.1-srcwget https://dlcdn.apache.org/brpc/1.14.1/apache-brpc-1.14.1-src.tar.gztar zxvf apache-brpc-1.14.1-src.tar.gzcd apache-brpc-1.14.1-srccmake -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_GLOG=ON -DWITH_GLOG=ONcmake --build build/# 安装到特定目录mkdir ~/soft/brpccp -r buid/output/* ~/soft/brpc/进入例子程序
cd example/echo_c++/cmake -B build && cmake --build build# 运行服务./build/echo_server 运行客户端./build/echo_client$ cat test.protosyntax = "proto3";package Test;option cc_generic_services = true;service TestService {rpc runTest (TestRequest) returns (TestResponse);}message TestRequest {string message = 1;int32 msg_type = 2; // 新增:消息类型(如1-磁盘,2-网络,3-CPU,4-内存)}message TestResponse {string response = 1;int32 status_code = 2; // 新增:处理状态(如0-成功,1-失败)}$ cat src/server.cpp #include#include#include// BRPC 日志头文件 #include "test.pb.h" class TestServiceImpl : public Test::TestService { public: TestServiceImpl = default; ~TestServiceImpl = default; void runTest(google::protobuf::RpcController* cntl_base, const Test::TestRequest* request, Test::TestResponse* response, google::protobuf::Closure* done) override { brpc::ClosureGuard done_guard(done); brpc::Controller* cntl = static_cast$ cat src/client.cpp #include#include
$ cat CMakeLists.txt cmake_minimum_required(VERSION 3.10)project(test_brpc_project C CXX)# 设置C++标准set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED ON)# 固定依赖库路径(请根据您的实际安装路径修改)set(BRPC_INCLUDE_DIR "/home/release/soft/brpc/include")set(BRPC_LIB_DIR "/home/release/soft/brpc/lib")set(PROTOBUF_INCLUDE_DIR "/usr/include")set(PROTOBUF_LIB_DIR "/usr/lib")set(LEVELDB_INCLUDE_DIR "/usr/include")set(LEVELDB_LIB_DIR "/usr/lib")# 包含目录include_directories(${PROJECT_SOURCE_DIR}${BRPC_INCLUDE_DIR}${PROTOBUF_INCLUDE_DIR}${LEVELDB_INCLUDE_DIR})# 链接目录link_directories(${BRPC_LIB_DIR}${PROTOBUF_LIB_DIR}${LEVELDB_LIB_DIR})# 生成protobuf文件include(FindThreads) # 加载 CMake 内置模块,用于查找系统线程库(pthread)include(FindProtobuf) # 加载 CMake 内置模块,用于查找 Protobuf 库protobuf_generate_cpp(PROTO_SRC PROTO_HEADER idl/test.proto) # 编译 proto 文件:生成 C++ 源码(PROTO_SRC)和头文件(PROTO_HEADER)include_directories(${CMAKE_CURRENT_BINARY_DIR}) # 将 proto 生成文件的目录(编译目录)添加到头文件搜索路径# 服务器可执行文件add_executable(test_server src/server.cpp${PROTO_SRC} ${PROTO_HEADER})# 客户端可执行文件add_executable(test_client src/client.cpp${PROTO_SRC} ${PROTO_HEADER})# 链接库(固定库名称)target_link_libraries(test_server brpcgflagsglogunwindprotobufleveldbsslcryptopthreaddlz)target_link_libraries(test_client brpcgflagsglogunwindprotobufleveldbsslcryptopthreaddlz)$ ./build/test_server 测试服务器运行在端口 8000...$ ./build/test_client aa 1响应: [磁盘测试] 处理: aa状态码: 0 (成功)延迟: 2272us# 停止服务killall test_serverrpc_press --proto=../idl/test.proto --method=Test.TestService.runTest --input config.jsonrpc_press --proto=./test.proto --method=Test.TestService.runTest --input message.json --server 172.21.165.94:9000 --thread_num=30 --qps=5000
查看config.json
{ "message":"12345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456", "msg_type":2}最好基于源码和自定义路径安装protobuf库,否则一旦有问题,清理起来极为麻烦。
来源:走进科技生活
