问题一:gRPC究竟是什么?他究竟有什么用么?
答:在gRPC里客户端应用可以像调用本地对象一样直接调用另一台不同机器上服务端应用的方法,使得你能够更容易地创建分布式应用和服务。
问题二:Golang中原生支持rpc,他和grpc是什么个关系?
答:这里还是首先来介绍一下RPC吧,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。在GO中,标准库提供的net/rpc包实现了RPC协议需要的相关细节,开发者可以很方便的使用该包编写RPC的服务端和客户端程序。
然后这里我们在继续介绍一下grpc吧,grpc是一个高性能,开源,通用的rpc框架。默认采用protocol buffers数据序列化协议,支持多种开发语言。
那么现在我们就应该明白了,grpc相当于对rpc进行了封装,而且更加的通用,他的客户端-服务器之间不在都必须需要go开发了。
问题三:RPC中即支持http方式实现,又支持tcp方式实现,有什么不同么或有什么其他目的么?
答:我个人认为除了性能上吧,没有啥不同,tcp的性能应该比http高。
问题四:protobuf与protoc-gen-go之间什么区别和联系?
答:protobuf是google的一种数据交换的格式,它独立于语言和平台。就是所谓的一种序列化工具,protoc是protobuf文件的编译器,可以把.proto文件转换成各种编程语言定义的格式。protoc这个工具底层是调用相对应语言的编译插件才生产对应语言格式的文件。对于golang来说,protoc调用的就是protoc-gen-go这个编译插件。调用方式为protoc —go_out=protoc-gen-go路径。
问题五:protobuf是如何调用protoc-gen-go的?
答:这就是要说明一下protoc这个命令了。protoc命令后面会跟—go_out这个参数是告诉protoc去找什么编译插件的.如果是java那么应该会是—java_out。在你安装protoc-gen-go的时候,会在环境变量里面添加protoc-gen-go的路径的。当protoc命令收到—go_out参数就会在环境变量中去找protoc-gen-go了。
问题六:为什么不能直接go get github.com/grpc。然后直接拿过来用?
答:grpc是google开发的然后放在了自己的官网上面了,并且把源码上传到github上面了。但是你从github下载需要到制定的目录上面,因为里面的包名,文件名啥的都没有改。所以你需要用git clone github.grpc. $GOPATH/src/google.golang.org/.这样的方式才能编译grpc
问题七:protoc—go_out与protoc —go_out=plugins=grpc:生成的.go文件内容是不同的?
答:protoc需要—go_out去寻找protoc-gen-go这个插件,它能编译规范的protobuf类型的消息。但是对于grpc来说,我们需要在.proto文件中定义服务。然后通过工具生成对应的服务端和客户端代码的。所以需要plugins来告诉插件protoc-gen-go它需要用里面的grpc插件去编译生产文件。就是所谓插件里面继续指定插件。
有疑问加站长微信联系(非本文作者)