流水账:win10+gRPC1.34+Vs2015(vs2022+Qt)(二)

1 准备工作

1.1 参考链接

gRPC 官方文档中文版V1.0:C++教程

Protocol Buffers 文档

win10系统 C++环境 安装编译GRPC

1.2  “*.proto”文件准备

1.2.1 源文件里的例子里

        路径:“./grpc/examples/protos”

1.2.2 自己写

代码示例如下,保存文件后缀“.proto” @Protocol Buffers 文档

syntax = "proto3";

package hello;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

2 VC++项目使用

2.1 生成*.proto.pb.cc、*.proto.pb.h、*.pb.cc、*.pb.h文件

        VS2022创建空白项目,将准备的“*.proto”文件copy值项目目录下,并在此目录下“cmd.exe”调出控制台输入以下命令:

D:\...\mscv2015\third_party\protobuf\Release\protoc.exe -I="." --grpc_out="." --plugin=protoc-gen-grpc="D:\...\mscv2015\Release\grpc_cpp_plugin.exe" "helloworld.proto"

D:\...\mscv2015\third_party\protobuf\Release\protoc.exe --cpp_out=. "helloworld.proto"

生成以下文件:

        将生成的文件以及*.proto文件添加至项目工程,将grpc源码示例中的“greeter_server.cc”文件copy至工程目录,并添加至工程(生成服务端软件)。

2.2 配置项目(debug模式)

        打开项目属性,如下图:

2.2.1 附件包含目录

2.2.2 预处理器定义

 

2.2.3  附加库目录

2.2.4 附加依赖项

完整附加依赖项目录如下:

libprotobufd.lib
gpr.lib
grpc.lib
grpc++.lib
grpc++_reflection.lib
address_sorting.lib
ws2_32.lib
cares.lib
zlibstaticd.lib
upb.lib
ssl.lib
crypto.lib
absl_bad_any_cast_impl.lib
absl_bad_optional_access.lib
absl_bad_variant_access.lib
absl_base.lib
absl_city.lib
absl_civil_time.lib
absl_cord.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_config.lib
absl_flags_internal.lib
absl_flags_marshalling.lib
absl_flags_parse.lib
absl_flags_program_name.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_leak_check_disable.lib
absl_log_severity.lib
absl_malloc_internal.lib
absl_periodic_sampler.lib
absl_random_distributions.lib
absl_random_internal_distribution_test_util.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_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
absl_statusor.lib
re2.lib

2.2.5 编译运行结果

2.3 配置项目(Release模式)

2.3.1 附件包含目录

        同debug模式。

2.3.2 预处理器定义

        注意:这里有差别,下图红笔标注处

2.3.3 附加库目录

        这里需要注意的是,debug需要替换成Release

2.3.4 附加依赖项 

这里有两个lib需要注意,其他同debug模式:libprotobuf.lib;zlibstatic.lib;

2.3.5 编译运行结果

3 Qt项目使用 

测试项目与VC++项目区别:

1、建Qt控制台项目,Qt Project Setting如下:

2、“greeter_server.cc”、“greeter_client.cc”文件与“main.cpp”合并,server示例代码如下:

#include <QtCore/QCoreApplication>

#include <iostream>
#include <memory>
#include <string>

#include <grpcpp/grpcpp.h>

#ifdef BAZEL_BUILD
#include "examples/protos/helloworld.grpc.pb.h"
#else
#include "hello.grpc.pb.h"
#endif

using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using hello::HelloRequest;
using hello::HelloReply;
using hello::Greeter;

// Logic and data behind the server's behavior.
class GreeterServiceImpl final : public Greeter::Service {
    Status SayHello(ServerContext* context, const HelloRequest* request, HelloReply* reply) override {
        std::string prefix("Hello ");
        reply->set_message(prefix + request->name());
        return Status::OK;
    }
};

void RunServer() {

    std::string server_address("0.0.0.0:50051");
    GreeterServiceImpl service;

    ServerBuilder builder;
    builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
    builder.RegisterService(&service);

    std::unique_ptr<Server> server(builder.BuildAndStart());
    std::cout << "Server listening on " << server_address << std::endl;

    server->Wait();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    RunServer();

    return a.exec();
}

3 运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值