grpc在windows环境下的配置与编译
1. 简介
gRPC(全称为gRPC Remote Procedure Call)是一种高性能、开源的远程过程调用(RPC)框架。由Google开发,gRPC基于HTTP/2协议,并使用Protocol Buffers(Protobufs)作为接口描述语言。以下是gRPC的一些关键特性和优势:
高性能:gRPC利用HTTP/2的特性,例如多路复用和二进制协议,提高了传输效率和性能。
多语言支持:gRPC支持多种编程语言,包括C++、Java、Python、Go、Ruby、C#等,使得开发人员可以在不同的编程环境中使用它。
简化开发:通过使用Protobufs,gRPC提供了一种简洁和高效的方式来定义服务接口和消息结构。
双向流:gRPC支持客户端和服务器之间的双向流通信,使得它在需要实时通信的应用场景中表现尤为出色。
负载均衡和命名解析:gRPC内置了负载均衡和命名解析功能,使其更易于在分布式系统中使用。
1.1 主要组成部分
服务定义:开发者使用Protobufs定义服务和消息。
客户端和服务器代码生成:gRPC使用Protobufs定义生成相应的客户端和服务器代码。
传输层:基于HTTP/2协议进行高效的数据传输。
1.2 使用场景
微服务架构:在微服务架构中,gRPC常被用来实现服务间的高效通信。
实时通信应用:由于支持双向流,gRPC非常适用于需要实时通信的应用,例如聊天应用、视频流应用等。
跨语言服务:gRPC的多语言支持使得它非常适合跨语言的服务调用场景。
2. grpc配置
2.1 下载
由于国内环境,grpc下载极其困难的。目前在Gitee上只能找到gRPC依赖的部分”官方”镜像仓库,而网上提供的镜像仓库较旧,所以这里我构造的是v1.34.0版本。通过下面代码,选择一个稳定的分支进行克隆。
1 | git clone -b v1.34.0 https://gitee.com/mirrors/grpc-framework.git grpc |
选择一个存放grpc项目的文件,按下Shift+鼠标右键,就会弹出如下目录,点击Open Git Bash here
弹出bash终端,输入上述代码:
下载完成后,在你选择的目录下出现一个grpc的文件夹,就表示克隆完成。
2.2 修改文件内容
在克隆下来的grpc文件中,有一个.gitmodules文件,里面存放的是我们需要的grpc子模块的网址,一般方式是访问不了的,所以需要修改成我们能够访问的国内的gitee上仓库的地址。这里直接将下面代码复制去替换.gitmodules文件里面的内容。
1 | [submodule "third_party/zlib"] |
然后使用如下指令更新gRPC所有依赖:在grpc目录下点击Open Git Bash here
,在弹出的bash终端输入下面指令。
1 | git submodule update --init |
3. 编译
3.1 创建存放生成的vs项目位置
在grpc目录下创建一个visualpro文件夹,用于存放生成的windows所用的项目。
3.2 启动CMake
启动CMake后,会出现下面界面:
点击Configure后,出现以下界面:
点击Finish后,等待编译,完成后就得到以下界面,不需要修改,直接点击Configure,生成配置。**(到这里可以先完成go和NASM的安装,因为不确定在接下来的grpc编译和生成中会不会需要它们)**
配置完成后,点击Generate直接生成。生成成功后,在visualpro目录下会出现生成的文件:
其中grpc.sln是创建的工程的路径,点击打开,出现以下界面,找到ALL_BUILD,右键选择重新生成(时间有点长)。
上面生成的是Debug版本,下面在重新生成Release的版本。
当visualpro目录下出现Debug和Release文件时,说明生成完毕!
3.3 下载并配置NASM
编译grpc需要准备nasm,下载网址为https://www.nasm.us/,点击网址后进入NASM官网,点击右上角的DOWNLOAD,选择版本2.16,选择系统Win64,然后下载NASM的可执行文件nasm-2.16-installer-x64.exe
,下载好后得到以下可执行文件:
然后点击该可执行文件,安装步骤是一直next即可。
找到刚刚安装的目录,复制该路径。
将该路径配置到环境变量:
4. 安装go
windows环境下下载go,安装地址:https://studygolang.com/dl。根据自己系统下载,什么版本都可
下载好后,进行安装,一直next即可,安装好后go会自动写入我们的环境变量。然后打开终端,执行go version
,出现对应的go版本,就表示安装成功。
替换代理,在终端执行以下代码,换成国内网络直连的模式
1 | go env -w GOPROXY=https://goproxy.cn,direct |