在Windows搭建gRPC C++开发环境

本文介绍在Windows下使用Visual Studio 2017编译gRPC 1.48.0并配置开发环境,以及开发、配置一个简单的c++服务端以及.net客户端。

0、前置条件

在Windows搭建gRPC C++开发环境_第1张图片

1、下载gRPC源码

使用git命令行在预备存放grpc源码的目录下执行, 此处我们下载的是 grpc 1.48.0

git clone -b v1.48.0 https://github.com/grpc/grpc

进入源码目录

cd grpc

下载依赖库

git submodule update --init

*此处注意,确保所有依赖库下载成功。

2、使用CMake生成工程文件

在生成工程文件时做,做如下调整:

l 添加ABSL_PROPAGATE_CXX_STD选项,类型为bool设置为true;

l 将源码目录下third_party\zlib\CMakeList.txt的第一行依赖的CMake版本修改为2.8.12;

l 添加CMAKE_INSTALL_PREFIX选项,类型为Path,设置为gRPC编译后的安装目录。

如下图所示:

在Windows搭建gRPC C++开发环境_第2张图片

点击【Configure】设置需要的编译环境,如下图所示:

在Windows搭建gRPC C++开发环境_第3张图片

点击【Finish】后配置环境日志中没有报错后,点击【Generate】生成工程文件。

3、编译、安装gRPC

使用管理员运行Visual Studio 2017,并打开上一步生成的工程grpc.sln。

将环境设置为Release x64生成ALL_BUILD项目。

生成INSTALL项目,此时会将生成的文件安装到第2步中CMAKE_INSTALL_PREFIX配置的路径中。

将安装目录下的bin目录路径添加到环境变量Path中,如下图所示:

在Windows搭建gRPC C++开发环境_第4张图片

至此,gRPC的c++环境已经配置好。

4、创建测试工程

创建一个解决方案GRPCTest包含c++空项目CPPServer及.Net 控制台项目DotNetClient。

在解决方案目录下创建pb文件夹,拷贝gRPC源码目录下examples\protos\helloworld.proto文件到pb文件夹中。

此时,整个解决方案的目录结构如下:

在Windows搭建gRPC C++开发环境_第5张图片

5、编译proto文件

打开命令行终端进入pb文件夹,执行以下命令生成c++文件及c#文件。

其中:grpc_cpp_plugin.exe及grpc_csharp_plugin.exe所在路径替换为您安装的路径。

此时整个解决方案的目录结构如下:

在Windows搭建gRPC C++开发环境_第6张图片

6、生成CPPServer项目

拷贝grpc源码目录下examples\cpp\helloworld\greeter_server.cc到CPPServer目录下,并将文件helloworld.grpc.pb.h、helloworld.pb.h、greeter_server.cc、helloworld.grpc.pb.cc及helloworld.pb.cc添加到CPPServer工程中。

添加包含目录,如下图所示,路径为grpc的安装路径:

在Windows搭建gRPC C++开发环境_第7张图片

添加附加库目录,如下图所示,路径为grpc的安装路径:

在Windows搭建gRPC C++开发环境_第8张图片

添加附加依赖项:

absl_bad_optional_access.lib
absl_bad_variant_access.lib
absl_base.lib
absl_city.lib
absl_civil_time.lib
absl_cord.lib
absl_cordz_functions.lib
absl_cordz_handle.lib
absl_cordz_info.lib
absl_cordz_sample_token.lib
absl_cord_internal.lib
absl_debugging_internal.lib
absl_demangle_internal.lib
absl_examine_stack.lib
absl_exponential_biased.lib
absl_failure_signal_handler.lib
absl_flags.lib
absl_flags_commandlineflag.lib
absl_flags_commandlineflag_internal.lib
absl_flags_config.lib
absl_flags_internal.lib
absl_flags_marshalling.lib
absl_flags_parse.lib
absl_flags_private_handle_accessor.lib
absl_flags_program_name.lib
absl_flags_reflection.lib
absl_flags_usage.lib
absl_flags_usage_internal.lib
absl_graphcycles_internal.lib
absl_hash.lib
absl_hashtablez_sampler.lib
absl_int128.lib
absl_leak_check.lib
absl_log_severity.lib
absl_low_level_hash.lib
absl_malloc_internal.lib
absl_periodic_sampler.lib
absl_random_distributions.lib
absl_random_internal_distribution_test_util.lib
absl_random_internal_platform.lib
absl_random_internal_pool_urbg.lib
absl_random_internal_randen.lib
absl_random_internal_randen_hwaes.lib
absl_random_internal_randen_hwaes_impl.lib
absl_random_internal_randen_slow.lib
absl_random_internal_seed_material.lib
absl_random_seed_gen_exception.lib
absl_random_seed_sequences.lib
absl_raw_hash_set.lib
absl_raw_logging_internal.lib
absl_scoped_set_env.lib
absl_spinlock_wait.lib
absl_stacktrace.lib
absl_status.lib
absl_statusor.lib
absl_strerror.lib
absl_strings.lib
absl_strings_internal.lib
absl_str_format_internal.lib
absl_symbolize.lib
absl_synchronization.lib
absl_throw_delegate.lib
absl_time.lib
absl_time_zone.lib
address_sorting.lib
cares.libcrypto.lib
gpr.libgrpc++.lib
grpc++_alts.lib
grpc++_error_details.lib
grpc++_reflection.lib
grpc++_unsecure.lib
grpc.lib
grpcpp_channelz.lib
grpc_plugin_support.lib
grpc_unsecure.lib
libprotobuf-lite.lib
libprotobuf.lib
libprotoc.lib
re2.lib
ssl.lib
upb.lib
zlib.lib

编译生成CPPServer

7、生成DotNetClient

通过Nuget安装Grpc、Grpc.Core及Google.Protobuf

将Helloworld.cs及HelloworldGrpc.cs文件添加到项目中。

编辑Program.cs如下所示:

using System;
using Grpc.Core;
using Helloworld;

namespace DotNetClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);
            var client = new Greeter.GreeterClient(channel);
            var reply = client.SayHello(new HelloRequest { Name = "tom" });
            Console.WriteLine("Greeting: " + reply.Message);
            channel.ShutdownAsync().Wait();
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

编译生成DotNetClient

8、测试

先运行CPPServer.exe再运行DotNetClient.exe 如下图所示:

在Windows搭建gRPC C++开发环境_第9张图片

你可能感兴趣的:(gRPC环境搭建,gRPC)