PHP centos下安装grpc

CENTOS、CPP

CentOS7下安装gRPC for CPP

2016年7月19日 BROLY

[版权声明] 本站内容采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆 (CC BY-NC-SA 3.0 CN) 进行许可。
部分内容和资源来自网络,纯学习研究使用。如有侵犯您的权益,请及时联系我,我将尽快处理。
如转载请注明来自: Broly的博客,本文链接: CentOS7下安装gRPC for CPP

gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C#。

gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

  • 官方网站:http://www.grpc.io/
  • 官方文档:http://www.grpc.io/docs/
  • 中文翻译:http://doc.oschina.net/grpc

 

测试环境:

系统是新安装的CentOS 7.2

Shell

 

1

2

[root@localhost ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

 

一、YUM安装相关工具

 

Shell

 

1

2

yum install -y gcc-c++ autoconf libtool

yum groupinstall -y "Development Tools"

 

二、下载gRPC源码和相关子模块

这步可能出现失败或者网速慢的情况(原因你懂的),多执行几次直到完全下载完毕为止。

Shell

 

1

2

3

git clone https://github.com/grpc/grpc.git

cd grpc

git submodule update --init

 

三、编译安装protobuf

这个步骤有个地方要下载googlecode的里面的代码,国内正常来说是下载不下来的(除非有梯子),所以要换个下载地址:

Shell

 

1

2

[root@localhost grpc]# cd third_party/protobuf/

[root@localhost protobuf]# vim autogen.sh

找到这行:

Shell

 

1

curl $curlopts -O https://googlemock.googlecode.com/files/gmock-1.7.0.zip

修改为:

Shell

 

1

curl $curlopts  -L -o gmock-1.7.0.zip https://github.com/peter-wangxu/gMock/archive/1.7.0.zip

然后编译安装即可:

Shell

 

1

2

3

4

5

6

7

8

9

[root@localhost protobuf]# ./autogen

[root@localhost protobuf]# ./configure

[root@localhost protobuf]# make

[root@localhost protobuf]# make install

[root@localhost protobuf]# ldconfig # refresh shared library cache.

[root@localhost protobuf]# which protoc

/usr/local/bin/protoc

[root@localhost protobuf]# protoc --version

libprotoc 3.0.0

 

四、编译安装gRPC

 

 

1

2

3

[root@localhost protobuf]# cd ../..

[root@localhost grpc]# make

[root@localhost grpc]# make install

执行make install的时候,我这里有错误提示:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Warning: it looks like protoc 3.0.0+ isn't installed on your system,

which means that you won't be able to compile .proto files for use

with gRPC.

 

If you are just using pre-compiled protocol buffers, or you otherwise

have no need to compile .proto files, you can ignore this.

 

If you do need protobuf for some reason, you can download and install

it from:

 

   https://github.com/google/protobuf/releases

 

Once you've done so, you can re-run this check by doing:

 

   make verify-install

明明是有安装protoc的,但是没检测到,网上找了资料说这个问题好像是不影响的。

五、Demo测试

官方自带有个HelloWorld的Demo,可以编译这个Demo看是否我们已经安装成功了。

 

1

2

[root@localhost grpc]# cd examples/cpp/helloworld/

[root@localhost helloworld]# make

结果报错了:

 

1

2

3

4

5

6

7

Package grpc++ was not found in the pkg-config search path.

Perhaps you should add the directory containing `grpc++.pc'

to the PKG_CONFIG_PATH environment variable

No package 'grpc++' found

Package grpc was not found in the pkg-config search path.

Perhaps you should add the directory containing `grpc.pc'

to the PKG_CONFIG_PATH environment variable

意思是找不到环境变量PKG_CONFIG_PATH,解决方法是把环境变量加上去:

在gRPC目录下保存文件actviate.sh:

 

1

2

3

4

5

6

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

export PATH=$PATH:$DIR/bins/opt:$DIR/bins/opt/protobuf

export CPATH=$DIR/include:$DIR/third_party/protobuf/src

export LIBRARY_PATH=$DIR/libs/opt:$DIR/libs/opt/protobuf

export PKG_CONFIG_PATH=$DIR/libs/opt/pkgconfig:$DIR/third_party/protobuf

export LD_LIBRARY_PATH=$DIR/libs/opt

然后执行:

Shell

 

1

2

3

[root@localhost grpc]# source actviate.sh

[root@localhost grpc]# cd examples/cpp/helloworld/

[root@localhost helloworld]# make

编译成功。(注意,每次新开终端编译或运行程序,都要执行actviate.sh,除非把环境变量设成永久有效)

然后运行服务端,监听的是50051端口:

Shell

 

1

2

3

4

[root@localhost helloworld]# ./greeter_server

I0719 09:09:11.798702503    5076 ev_epoll_linux.c:85]        epoll engine will be using signal: 36

D0719 09:09:11.798857929    5076 ev_posix.c:106]             Using polling engine: epoll

Server listening on 0.0.0.0:50051

在另外一个终端执行客户端程序:

 

1

2

3

4

[root@localhost helloworld]# ./greeter_client

I0719 09:10:04.431843293    5142 ev_epoll_linux.c:85]        epoll engine will be using signal: 36

D0719 09:10:04.432006262    5142 ev_posix.c:106]             Using polling engine: epoll

Greeter received: Hello world

成功!

你可能感兴趣的:(grpc)