Qt+Ubuntu 配置 gPRC
前情提要
由于最近pni项目需要使用 gPRC 发送数据,学习了下在 Qt+Ubuntu 环境下如何配置和使用gPRC。
配置环境
开发环境:Ubuntu 18.04 、Qt
gRPC
从github clone grpc的源码
1
$ git clone https://github.com/grpc/grpc.git
拉取子模块依赖
1
2$ cd grpc
$ git submodule update --init参考https://github.com/grpc/grpc/blob/master/BUILDING.md,使用cmake编译
1
2
3
4
5mkdir -p cmake/build
cd cmake/build
cmake ../..
make -j8
sudo make install
protobuf
下载并编译 protobuf
git 地址:https://github.com/protocolbuffers/protobuf/releases
1 | 解压 protobuf-3.21.10.tar.gz |
添加系统环境
build目录下有生成 grpc_cpp_plugin ,就将其拷贝到系统环境下
1 | cp -r grpc_cpp_plugin /usr/local/bin/ |
配置 Emacs / Vim
protocolbuf 提供了 vim 和 emacs 的扩展。下载非win32版本的 protobuf 的压缩包里,解压后有个 editors 目录,里面就是两个扩展文件:proto.vim是提供给vim爱好者的,而protobuf-mode.el 就是提供给emacs控的
将 protobuf-mode.el 文件添加到 Emacs 的 .emacs.d/lisp 路径下,在配置文件 init.el 添加以下代码
1 | (add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory)) ; 设定源码加载路径 |
效果如下:
测试 gRPC
构建样例
进入样例文件夹
1
cd examples/cpp/helloworld
使用
cmake
构建样例1
2
3
4mkdir -p cmake/build
pushd cmake/build
cmake ../..
make -j8
测试运行
在终端运行服务端
1
./greeter_server
在另一个终端运行客户端,可以看见客户端的输出
1
2./greeter_client
Greeter received: Hello world
编写 gRPC
Protocol Buffers
Protocol Buffers(Protocol Buffers | Google Developers),它可以用来定义消息和服务。然后,我们只需要实现服务即可,剩余的 gRPC 代码将会自动生成。
开发模式
gPRC使用的是合约优先的API开发模式,它默认使用 Protocol buffers (protobuf) 作为接口设计语言(IDL),这个 .proto 文件包括两部分:
- gRPC服务的定义
- 服务端和客户端之间传递的消息
定义协议 *.proto
将协议生成c++编辑器能够编译的c++代码
1 | protoc --proto_path=. --cpp_out=. ./student.proto |