Go grpc配置

AlstonWilliams · · 1320 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近在研究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_clientgreeter_server.我们先进入到greeter_server中,执行go run main.go,正确情况下,不会看到任何输出.

然后,新开一个Terminal,进入到greeter_client中,输入go run main.go,会输出:当前时间 + Greeting: Hello world.

总结

如果你还碰到了其他错误.就请自行Google吧.反正我碰到的错误,在这篇文章中,已经告诉你了.


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:AlstonWilliams

查看原文:Go grpc配置

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1320 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传