热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VS2015编译grpc

2019独角兽企业重金招聘Python工程师标准一、grpc概述GRPC是google开源的一个高性能、跨语言的RPC框架,基于HTTP2协议,基

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、grpc概述

 GRPC是google开源的一个高性能、跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x +。GRPC与thrift、avro-rpc等其实在总体原理上并没有太大的区别,简而言之GRPC并没有太多突破性的创新。

对于开发者而言:

    1)需要使用protobuf定义接口,即.proto文件

    2)然后使用compile工具生成特定语言的执行代码,比如JAVA、C/C++、Python等。类似于thrift,为了解决跨语言问题。

    3)启动一个Server端,server端通过侦听指定的port,来等待Client链接请求,通常使用Netty来构建,GRPC内置了Netty的支持。

    4)启动一个或者多个Client端,Client也是基于Netty,Client通过与Server建立TCP长链接,并发送请求;Request与Response均被封装成HTTP2的stream Frame,通过Netty Channel进行交互。

二、编译

      1、所需工具:操作系统:Win7 64位 、Visual Studio 2015 、CMake

      2、编译步骤:

      

1、下载

1.1 在 https://github.com/grpc/grpc/tree/v1.0.1 上下载 grpc-1.0.1.zip 文件(下载路径:https://github.com/grpc/grpc/archive/v1.0.1.zip)文件,将文件解压到 grpc-1.0.1。 
1.2 切换到 third_party 目录,分别下载依赖的其它项目,下达完成之后将依赖项分别解压到 third_party 下的对应目录下。 
如 在2017.01.17日,tag v1.0.1 对应的依赖项链接如下: 
https://codeload.github.com/grpc/grpc/zip/v1.0.1 
https://codeload.github.com/google/boringssl/zip/c880e42ba1c8032d4cdde2aba0541d8a9d9fa2e9 
https://codeload.github.com/gflags/gflags/zip/05b155ff59114735ec8cd089f669c4c3d8f59029 
https://codeload.github.com/google/googletest/zip/c99458533a9b4c743ed51537e25989ea55944908 
https://codeload.github.com/google/protobuf/zip/1a586735085e817b1f52e53feec92ce418049f69 
https://codeload.github.com/madler/zlib/zip/50893291621658f355bc5b4d450a8d06a563053d

2、编译protobuf

参考readme用CMAKE生成工程文件,编译即可。

2.1、下载protobuf依赖项gmock和gtest 
下载gmock(https://github.com/google/googlemock/archive/release-1.7.0.zip)和gtest(https://github.com/google/googletest/archive/release-1.7.0.zip),分别解压到grpc-1.0.1\third_party\protobuf\gmock 和 grpc-1.0.1\third_party\protobuf\gmock\gtest\ 目录下。 
2.2、使用CMake编译protobuf 
首先打开vs2015开发人员命令提示符窗口(使用 "VS2015 x86 本机工具命令提示符" 工具),切换到对应的protobuf目录。

  1. cd grpc-1.0.1\third_party\protobuf\cmake
  2. mkdir build & cd build & mkdir install
  3. mkdir debug & cd debug
  4. cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install ../..
  5. nmake && nmake install

生成完成,在grpc-1.0.1\third_party\protobuf\cmake\build\install\lib 目录下面有对应的Lib文件。在cmake目录下面mkdir debug,然后把install/lib目录下的所有库文件拷贝的debug路径,并把后缀d去掉。例如protobuf生成的库名称为libprotocd.lib,应该改名成libprotoc.lib。其他的依次类推。后面编译grpc会用到这些库。

3、编译grpc,grpc_protoc_plugin

在vsprojects里有建好的工程文件,下载nuget.exe,用于依赖包的网络下载。主要是依赖于openssl和zlib库。在编译grpc时,出现编译boringssl,出现很多错误,可以把工程移除可以直接在 grpc.sln 文件中删除 boringssl 工程。

3.1、下载nuget 
下载nuget.exe (路径:https://nuget.org/nuget.exe ),并将期复制到 grpc-1.0.1\vsprojects\ 目录下。 
3.2、使用nuget下载依赖包

  1. cd grpc-1.0.1\vsprojects
  2. nuget restore grpc.sln

3.3、编译grpc 
打开 grpc-1.0.1\vsprojects\grpc.sln 文件,删除boringssl工程,否则后面编译grpc时会报错。若不使用ssl,boringssl可以不编译。

  1. msbuild grpc.sln /p:Configuration=Debug

grpc-1.0.1\vsprojects\Debug\ 目录下会生成grpc相关文件。

3.3、编译grpc_cpp_plugin

  1. msbuild grpc_protoc_plugins.sln /p:Configuration=Debug

grpc-1.0.1\vsprojects\Debug\ 目录下会生成grpc_cpp_plugin相关文件。

4、编译zlib

参考readme,使用cmake编译。

  1. cd grpc-1.0.1\third_party\zlib\
  2. cmake CMakeLists.txt

再用 vs2015 打开 zlib.sln编译即可,文件生成在 Debug 目录。

三、编写测试例子   

1、根据helloworld.proto生成.h和.cc文件

将proto.exe、helloworld.proto、grpc_cpp_plugin.exe拷贝到一个文件夹中,grpc_cpp_plugin.exe是gRPC的protoc插件,生成方法参考我的《编译gRPC》一文。

创建一个bat文件,包含以下命令:

protoc.exe -I=. --grpc_out=. --plugin=protoc-gen-grpc=.\grpc_cpp_plugin.exe helloworld.proto
protoc.exe -I=. --cpp_out=. helloworld.proto

生成了两套文件

hellowworld.pb.h
hellowworld.pb.cc
hellowworld.grpc.pb.h
hellowworld.grpc.pb.cc

其中前两个是protoc生成的,后两个是插件生成的。

2、创建grpc_helloworld工程

在vsprojects目录创建空的WIN32 C++工程grpc_helloworld.sln,在目录grpc_helloworld下面有两个文件夹。目录结构如下图:

grpc-1.0.1\vsprojects\grpc_helloworld.sln 
grpc-1.0.1\vsprojects\grpc_helloworld\grpc_helloworld.vcxproj 
grpc-1.0.1\vsprojects\grpc_helloworld\grpc_helloworld.vcxproj.filters 
grpc-1.0.1\vsprojects\grpc_helloworld\protobuf\helloworld.pb.h 
grpc-1.0.1\vsprojects\grpc_helloworld\protobuf\helloworld.pb.cc 
grpc-1.0.1\vsprojects\grpc_helloworld\protobuf\helloworld.grpc.pb.h 
grpc-1.0.1\vsprojects\grpc_helloworld\protobuf\helloworld.grpc.pb.cc 
grpc-1.0.1\vsprojects\grpc_helloworld\client\greeter_client.cc3

3、设置头文件

D:\XXXX\grpc\include;
D:\XXXX\grpc\third_party\protobuf\src;
$(ProjectDir)..\proto

三个头文件目录,一个是gRPC的头文件,一个是protobuf的头文件,一个是刚生成的的访问类路径。

4、设置库

路径

D:\XXXX\grpc\third_party\protobuf\cmake\Release;
D:\XXXX\grpc\vsprojects\Release;
D:\XXXX\grpc\third_party\zlib\solution\Release;
D:\XXXX\grpc\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\lib\v120\Win32\Release\static

四个库文件路径:protobuf库路径、grpc库路径、zlib库路径、openssl库路径。
没有使用boringssl,openssl的库是从NuGet下载的package中找到的。

库文件

libprotobuf.lib;
grpc.lib;
gpr.lib;
grpc++.lib;
Ws2_32.lib;
libeay32.lib;
ssleay32.lib;
zlibstatic.lib;
%(AdditionalDependencies)
5、编译

      如果出错,则在工程里做如下设置:

预处理器设定: 
_DEBUG;_WIN32_WINNT=0x600;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)

代码生成–>运行库 设置为 "多线程调试 (/MTd)"。顺利的话就可以生成对应的exe了。

 

 

 

 

 

 

 


转:https://my.oschina.net/u/1426828/blog/838576



推荐阅读
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
author-avatar
mobiledu2502905213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有