转载: http://dreamlikes.cn/archives/555
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 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
测试环境:
系统是新安装的CentOS 7.2
1
2
|
[
root
@
localhost
~
]
# cat /etc/redhat-release
CentOS
Linux
release
7.2.1511
(
Core
)
|
一、YUM安装相关工具
1
2
|
yum
install
-
y
gcc
-
c
++
autoconf
libtool
yum
groupinstall
-
y
"Development Tools"
|
二、下载gRPC源码和相关子模块
这步可能出现失败或者网速慢的情况(原因你懂的),多执行几次直到完全下载完毕为止。
1
2
3
|
git
clone
https
:
/
/
github
.com
/
grpc
/
grpc
.git
cd
grpc
git
submodule
update
--
init
|
三、编译安装protobuf
这个步骤有个地方要下载googlecode的里面的代码,国内正常来说是下载不下来的(除非有梯子),所以要换个下载地址:
1
2
|
[
root
@
localhost
grpc
]
# cd third_party/protobuf/
[
root
@
localhost
protobuf
]
# vim autogen.sh
|
找到这行:
1
|
curl
$curlopts
-
O
https
:
/
/
googlemock
.googlecode
.com
/
files
/
gmock
-
1.7.0.zip
|
修改为:
1
|
curl
$curlopts
-
L
-
o
gmock
-
1.7.0.zip
https
:
/
/
github
.com
/
peter
-
wangxu
/
gMock
/
archive
/
1.7.0.zip
|
然后编译安装即可:
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
|
然后执行:
1
2
3
|
[
root
@
localhost
grpc
]
# source actviate.sh
[
root
@
localhost
grpc
]
# cd examples/cpp/helloworld/
[
root
@
localhost
helloworld
]
# make
|
编译成功。(注意,每次新开终端编译或运行程序,都要执行actviate.sh,除非把环境变量设成永久有效)
然后运行服务端,监听的是50051端口:
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
|
成功!