Skip to content

Latest commit

 

History

History
258 lines (220 loc) · 6.18 KB

README.MD

File metadata and controls

258 lines (220 loc) · 6.18 KB

A gRPC Demo

工程结构:

gRpcDemo
├── LICENSE
├── README.MD
├── cpp
│   ├── CMakeLists.txt
│   ├── build
│   └── client.cpp
├── proto
│   └── demo.proto
└── server
    ├── CMakeLists.txt
    ├── build
    ├── main.cpp
    └── server.hpp

1 MacOS

服务端使用 C++ 实现。

1.1 安装相关包

brew install grpc cmake openssl@1.1

1.2 服务端

1.2.1 生成相关文件

1.2.1.1 生成编解码文件
cd gRpcDemo/server/
protoc --cpp_out=. -I=../proto demo.proto

执行 tree proto,可见生成了两个 *.pb.* 文件:

proto
├── demo.pb.cc
├── demo.pb.h
└── demo.proto
1.2.1.2 生成服务接口文件
cd gRpcDemo/server/
protoc --grpc_out=. --plugin=protoc-gen-grpc="/usr/local/bin/grpc_cpp_plugin" -I=../proto demo.proto
# 这里需要填写 grpc_cpp_plugin 的绝对路径。安装的时候有提示;也可以通过命令获取:
# which grpc_cpp_plugin

执行 tree proto,可见生成了两个 *.grpc.pb.* 文件:

proto
├── demo.grpc.pb.cc
├── demo.grpc.pb.h
├── demo.pb.cc
├── demo.pb.h
└── demo.proto

1.2.2 编译

新建 build 目录,进入该目录进行编译:

cd gRpcDemo/server/
mkdir build
cd build
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"

# 生成 Makefile
cmake .. # 注意这里有两个点,表示 CMakeLists.txt 在上层目录

# 编译
make

1.2.3 运行

打开终端:

./server

1.3 cpp 客户端

1.3.1 生成相关文件

cd gRpcDemo/cpp/
protoc --cpp_out=. -I=../proto demo.proto
protoc --grpc_out=. --plugin=protoc-gen-grpc="/usr/local/bin/grpc_cpp_plugin" -I=../proto demo.proto

1.3.2 编译

新建 build 目录,进入该目录进行编译:

cd gRpcDemo/cpp/
mkdir build
cd build
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"

# 生成 Makefile
cmake .. # 注意这里有两个点,表示 CMakeLists.txt 在上层目录

# 编译
make

1.3.3 运行

打开终端:

./client

1.4 Python 客户端

gRPC Python Quick start

  • 配置环境:
cd gRpcDemo/python
python -m venv .env
source .env/bin/activate
pip install --upgrade pip
pip install grpcio grpcio-tools
  • 生成相关文件:
cd gRpcDemo/python
python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I=../proto demo.proto
  • 运行
# 启动客户端
python main.py

1.5 Java 客户端

gRPC 文件生成工具

cd java/src/main/java/
protoc --java_out=. -I=../../../../proto demo.proto
protoc --grpc-java_out=. --plugin=protoc-gen-grpc-java="存放的路径/protoc-gen-grpc-java-1.49.2-osx-x86_64.exe" -I=../../../../proto demo.proto

2 Windows

Windows 下连接静态库,动态连接更简单,网上参考资料很多。

2.1 安装相关包

2.1.1 安装 vcpkg

cd C:\Tools
git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat
  • 添加全局配置: 环境变量增加 vcpkg 所在路径(本文为:C:\Tools\vcpkg)。

2.1.2 安装 gRPC 相关组件

vcpkg install grpc:x86-windows-static
vcpkg install protobuf[zlib]:x86-windows-static
vcpkg integrate install

2.1.3 安装 VS2019

2.2 服务端

2.2.1 生成相关文件

2.2.1.1 生成编解码文件
cd gRpcDemo/server/
protoc --cpp_out=. -I=../proto demo.proto

执行 tree .,可见生成了两个 *.pb.* 文件:

.
├── demo.pb.cc
├── demo.pb.h
└── demo.proto
2.2.1.2 生成服务接口文件
cd gRpcDemo/server/
protoc --grpc_out=. --plugin=protoc-gen-grpc="C:\Tools\vcpkg\packages\grpc_x64-windows\tools\grpc\grpc_cpp_plugin.exe" -I=../proto demo.proto
# 这里需要填写 grpc_cpp_plugin 的绝对路径,去 vcpkg 的安装目录下找。

执行 tree .,可见生成了两个 *.grpc.pb.* 文件:

.
├── demo.grpc.pb.cc
├── demo.grpc.pb.h
├── demo.pb.cc
├── demo.pb.h
└── demo.proto

2.2.2 编译

新建 build 目录,打开 Developer Command Prompt for VS 2019,切换到 build 目录:

cd gRpcDemo/server/build
# 生成 Makefile(32位)
cmake -A Win32 -S .. -DVCPKG_TARGET_TRIPLET=x86-windows-static -DCMAKE_TOOLCHAIN_FILE=C:/Tools/vcpkg/scripts/buildsystems/vcpkg.cmake
# 生成 Makefile(64位)
# cmake -A x64 -S .. -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_TOOLCHAIN_FILE=C:/Tools/vcpkg/scripts/buildsystems/vcpkg.cmake

# 编译
cmake --build . --config Release

2.2.3 运行

打开两个终端:

./server

如果出现中文乱码,将终端编码改成 UTF-8 即可。

2.3 cpp 客户端

2.3.1 生成相关文件

cd gRpcDemo/cpp/
protoc --cpp_out=. -I=../proto demo.proto
protoc --grpc_out=. --plugin=protoc-gen-grpc="/usr/local/bin/grpc_cpp_plugin" -I=../proto demo.proto

2.3.2 编译

新建 build 目录,打开 Developer Command Prompt for VS 2019,切换到 build 目录:

cd gRpcDemo/cpp/build
# 生成 Makefile(32位)
cmake -A Win32 -S .. -DVCPKG_TARGET_TRIPLET=x86-windows-static -DCMAKE_TOOLCHAIN_FILE=C:/Tools/vcpkg/scripts/buildsystems/vcpkg.cmake
# 生成 Makefile(64位)
# cmake -A x64 -S .. -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_TOOLCHAIN_FILE=C:/Tools/vcpkg/scripts/buildsystems/vcpkg.cmake

# 编译
cmake --build . --config Release

2.3.3 运行

打开终端:

./client

2.4 Python 客户端

参考 1.4。

2.5 Java 客户端

选择 32 位的 JDK temurin

gRPC 文件生成工具

cd java/src/main/java/
protoc --java_out=. -I=../../../../proto demo.proto
protoc --grpc-java_out=. --plugin=protoc-gen-grpc-java="存放的路径/protoc-gen-grpc-java-1.49.2-windows-x86_32.exe" -I=../../../../proto demo.proto