介绍 gRPC
gRPC 是由 google 开发的一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
- 定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型);
- 在服务端实现这个服务接口,运行一个 gRPC 服务器来处理客户端调用;
- 在客户端调用服务端的方法,就像调用本地函数一样。
官网 | 下载 | 中文文档 |
安装 gRPC
-
安装依赖项
-
cmake 3.13 及以后的版本
-
其他依赖:
1
sudo apt install -y build-essential autoconf libtool pkg-config
-
-
从 github 下载,并下载第三方模块
-
有 github 网络条件的情况:
1
git clone --recurse-submodules -b RELEASE_TAG_HERE https://github.com/grpc/grpc
-
访问 github 不太顺畅的情况:
1 2 3 4
git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc.git cd grpc # 这里还有一步:替换所有的 git submodule 地址为国内加速地址 git submodule update --init
-
-
编译、安装 grpc 以及依赖到 /usr/local 目录
安装完成后,会在 /usr/local/bin 目录生成 grpc_cpp_plugin 执行文件;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
cd grpc mkdir build cd build # 编译为静态库(默认,和下面的方式选一种) cmake .. -DgRPC_INSTALL=ON \ -DgRPC_BUILD_TESTS=OFF \ -Dprotobuf_BUILD_TESTS=OFF # 编译为动态库 cmake .. -DgRPC_INSTALL=ON \ -DgRPC_BUILD_TESTS=OFF \ -Dprotobuf_BUILD_TESTS=OFF \ -DBUILD_SHARED_LIBS=ON make sudo make install
-
将 /usr/local/bin 放到环境变量,编辑
vim ~/.zshrc
文件最后行1
export PATH=$PATH:/usr/local/bin
接着刷新
source ~/.zshrc
; -
为了能正确找到库文件,需要执行下 ldconfig
1
sudo ldconfig
交叉编译 gRPC
在主环境已经安装好 grpc 的条件下进行交叉编译;
-
使用交叉编译器:arm-openwrt-linux-gcc;
-
设置环境变量
1 2 3 4 5 6 7 8 9 10
export HOST=arm-openwrt-linux export ROOTFS="${HOME}/dev_rootfs/${HOST}" export CFLAGS="-L${ROOTFS}/usr/local/lib -I${ROOTFS}/usr/local/include" export CC=${HOST}-gcc export AR=${HOST}-ar export NM=${HOST}-nm export LD=${HOST}-ld export STRIP=${HOST}-strip export RANLIB=${HOST}-ranlib export PREFIX=${ROOTFS}/usr/local
-
交叉编译、安装 grpc 以及依赖到 ${HOME}/dev_rootfs/${HOST}/usr/local 目录
每次按该方法编译时都需要设置环境变量;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
cd grpc mkdir build cd build cmake .. -DCMAKE_CROSSCOMPILING=true \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_PROCESSOR=arm \ -DCMAKE_C_COMPILER=${HOST}-gcc \ -DCMAKE_CXX_COMPILER=${HOST}-g++ \ -DCMAKE_FIND_ROOT_PATH=${ROOTFS}/usr/local/ \ -DCMAKE_INSTALL_PREFIX:PATH=${ROOTFS}/usr/local/ \ -DgRPC_INSTALL=ON \ -DgRPC_BUILD_TESTS=OFF \ -Dprotobuf_BUILD_TESTS=OFF \ -DBUILD_SHARED_LIBS=ON # make 过程会调用 ${CMAKE_INSTALL_PREFIX}/bin/protoc 文件 # 需要先从主机侧拷贝 protoc 文件到这里(如果该命令失效,请检查主环境的安装情况,以及 sudo ldconfig 有没有执行过) mkdir -p ${ROOTFS}/usr/local/bin \cp $(which protoc) ${ROOTFS}/usr/local/bin make make install
PS:需要在小机端运行时,只需要将 ${ROOTFS}/usr/local/lib 拷贝到小机端 /usr/local/lib 目录即可;
初步体验 gRPC
以下编译 cpp 示例 helloworld;
-
在 gRPC 目录中:
1 2 3 4 5 6
cd examples/cpp/helloworld/ mkdir build cd build cmake .. make
-
终端 1 运行服务器:
1
./greeter_server
-
终端 2 运行客户端:
1
./greeter_client