最近在研究Docker的源码时,读到libContainerd部分时,发现它用到了grpc.而此前只知道只是一个用于分布式系统中RPC的库.就借着这个机会,学习一下这个工具.
写过Java中的WSDL的朋友,会觉得其实它们的使用非常相似.
安装ProtoBuf 3
因为grpc依赖ProtoBuf,将我们写的服务定义转换成Go文件.所以我们需要安装ProtoBuf.
那为什么要安装ProtoBuf 3这个新出的,各个方面都还不是很完善的版本呢?官网上建议采用这个版本,就安装这个版本喽.如果我们安装ProtoBuf2,以后很可能会有兼容问题.
那如何安装呢?
首先,去ProtoBuf的Github主页下载最新版的ProtoBuf的包.在我写这篇文章时,最新版的是3.0.2.这里因为我们是为Go配置的,所以我们选择protobuf-cpp-3.0.2.tar.gz这个包下载.在Go support for Protocol Buffers上有明确的说明.
下载完成后,我们还需要对其进行编译安装.使用下面的命令:
tar zxvf protobuf-cpp-3.0.2.tar.gz
cd protobuf-cpp-3.0.2
./configure
make install
然后使用protoc --version命令应该会看到相应的版本号.我这里是libprotoc 3.0.0.如果没有看到,并提示Error while loading shared libraries: libprotobuf.so.10: cannot open shared object file: No such file or directory.那Congratulation,你跟我一样中了彩蛋了.其实我们只需要安装一下libprotoc就可以解决啦.执行下面的这条命令:
sudo apt-get install libprotobuf-c0
配置项目
除此之外,我们还需要在项目中获取protobuf的包.使用下面这条命令:
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
这样我们就获取到了跟protobuf相关的包.我们还需要获取grpc的包:
go get google.golang.org/grpc
各位朋友也知道,在国内,访问Google家的产品,GFW总不会让你那么顺利.Google的Docker镜像仓库gcr.io被GFW墙了,而Golang的包仓库google.golang.org又被GFW墙了.所以,你在执行上面的那条命令时,很可能不会成功.
那这可如何是好?
给你张图片自己体会吧.
我推荐各位使用ShadowSocks的这种翻墙方式.然后配合上polipo,将socks5代理转换成http代理,进行翻墙.
在Ubuntu中,一般通过下面两条命令,直接将socks5设置为http代理:
export http_proxy=socks5://localhost:1080
export https_proxy=socks5://localhost:1080
但是,当我们采用这种方式使用go get 安装包时,老是失败.所以我们需要将socks5代理转换为http代理.
测试成功与否
如果你在上面的步骤中,都没有错误发生,那么应该是成功了......
你信吗?
反正我不信.
实践是检验真理的唯一标准!!
我们进入到google.golang.org_1/grpc/examples/helloworld/这个目录下,可以看到其中有两个子目录:greeter_client和greeter_server.我们先进入到greeter_server中,执行go run main.go,正确情况下,不会看到任何输出.
然后,新开一个Terminal,进入到greeter_client中,输入go run main.go,会输出:当前时间 + Greeting: Hello world.
总结
如果你还碰到了其他错误.就请自行Google吧.反正我碰到的错误,在这篇文章中,已经告诉你了.
有疑问加站长微信联系(非本文作者)