介绍 bRPC
bRPC 是百度开源工业级 RPC 框架,很多知乎牛人评价 bRPC 比 gRPC 接口更友好;
官网 | 中文文档 |
编译 bRPC
安装依赖
如果需要静态连接 leveldb 库就安装 snappy 依赖:
1
sudo apt-get install -y libsnappy-dev
如果需要在 bRPC example 中启用 cpu/heap 分析器就安装 google-perftools:
1
2
3
4
5
6
7
8
9
git https://github.com/gperftools/gperftools.git
cd gperftools
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
sudo make install
sudo ldconfig
如果需要运行内置 test 程序,需要安装 googletest(apt 安装 gtest 是未编译的)
1
2
3
4
5
sudo apt-get install -y libgtest-dev
cd /usr/src/gtest
sudo cmake .
sudo make
sudo mv libgtest* /usr/local/lib/
安装 openssl 1.1.1k(动态库):
1
2
3
4
5
6
7
8
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
tar -vxf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
./config --prefix=/usr/local
make
sudo make install
sudo ldconfig
安装 gflags(动态库):
gflags 是 google 开源的命令行参数解析工具,比 getopt 功能更强大;
1
2
3
4
5
6
7
8
9
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
sudo ldconfig
安装 protobuf:
protobuf 是 google 开发的一种数据描述语言;
安装 zlib 依赖:
sudo apt install zlib1g-dev
;
1
2
3
4
5
6
7
8
9
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf/cmake
mkdir build
cd build
cmake -Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
sudo ldconfig
安装 leveldb(动态库):
leveldb 是 google 开发的持久化的 key/value 存储数据库;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
git clone https://github.com/google/leveldb.git
cd leveldb
sed -i 's/https:\/\/github.com\//https:\/\/hub.fastgit.org\//g' .gitmodules
git submodule update --init
# 安装 third_party/googletest
cd third_party/googletest
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
sudo ldconfig
cd ../../..
# 安装 leveldb
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
sudo ldconfig
下载编译 brpc
-
从 github 克隆 brpc
1 2 3
git clone https://github.com/apache/incubator-brpc.git mv incubator-brpc brpc cd brpc
-
确保几个条件然后执行 brpc 配置脚本
–headers 目录中存在:
一些头文件在环境变量中可以找到也是可以的,比如 /usr/local/include/google/protobuf/*.h;
- openssl/ssl.h
- gflags/gflags.h
- leveldb/db.h
–libs 目录存在:
- libssl.so 动态库
- libgflags.so 动态库
- libprotobuf.so 动态库
- libleveldb.so 动态库
如果上述目标不满足就修改指定目录,或者从其他目录拷贝一下目标文件到指定目录,然后执行配置脚本,接着编译:
一定要保证依赖项都是动态库,之前用静态库踩坑了,总是链接失败;
1 2
sh config_brpc.sh --headers=/usr/include --libs=/usr/local/lib make
最终 output 目录生成的文件如下:
初步使用 bPRC
第一个示例
我们找到了一个 brpc 中最简示例:
1
cd example/echo_c++
遇到问题
开始编译:
1
make
编译后会生成 echo_server
、echo_client
,理论上依次执行两个 elf 会成功通信,但是我这里执行起来都是段错误,这个问题我在官方 github 提了 issue #1470;
尝试解决
编辑目录中 vim CMakeLists.txt
添加依赖项 tcmalloc:
接着再尝试编译:
1
2
3
4
mkdir build
cd build
cmake ..
make
运行结果
-
终端 1 运行服务器
1
./echo_server
-
终端 2 运行客户端
1
./echo_client