File tree Expand file tree Collapse file tree 3 files changed +12
-3
lines changed
Expand file tree Collapse file tree 3 files changed +12
-3
lines changed Original file line number Diff line number Diff line change 22
33GRPC是Google公司基于Protobuf开发的跨语言的开源RPC框架。GRPC基于HTTP/2协议设计,可以基于一个HTTP/2链接提供多个服务,对于移动设备更加友好。本节将讲述GRPC的简单用法。
44
5- ## 4.4.1 GRPC入门
5+ ## 4.4.1 GRPC技术栈
6+
7+ Go语言的GRPC技术栈如图所示:
8+
9+ ![ ] ( ../images/ch4.4-1-grpc-go-stack.png )
10+
11+ 最底层为TCP或Unix Socket协议,在此之上是HTTP/2协议的实现,然后在HTTP/2协议之上又构建了针对Go语言的GRPC核心库。应用程序通过GRPC插件生产的Stub代码和GRPC核心库通信,也可以直接和GRPC核心库通信。
12+
13+ ## 4.4.2 GRPC入门
614
715如果从Protobuf的角度看,GRPC只不过是一个针对service接口生成代码的生成器。我们在本章的第二节中手工实现了一个简单的Protobuf代码生成器插件,只不过当时生成的代码是适配标准库的RPC框架的。现在我们将学习GRPC的用法。
816
@@ -95,7 +103,7 @@ func main() {
95103
96104GRPC和标准库的RPC框架有一个区别,GRPC生成的接口并不支持异步调用。不过我们可以在多个Goroutine之间安全地共享GRPC底层的HTTP/2链接,因此可以通过在另一个Goroutine阻塞调用的方式模拟异步调用。
97105
98- ## 4.4.2 GRPC流
106+ ## 4.4.3 GRPC流
99107
100108RPC是远程函数调用,因此每次调用的函数参数和返回值不能太大,否则将严重影响每次调用的响应时间。因此传统的RPC方法调用对于上传和下载较大数据量场景并不适合。同时传统RPC模式也不适用于对时间不确定的订阅和发布模式。为此,GRPC框架针对服务器端和客户端分别提供了流特性。
101109
@@ -208,7 +216,7 @@ for {
208216
209217这样就完成了完整的流接收和发送支持。
210218
211- ## 4.4.3 发布和订阅模式
219+ ## 4.4.4 发布和订阅模式
212220
213221在前一节中,我们基于Go内置的RPC库实现了一个简化版的Watch方法。基于Watch的思路虽然也可以构造发布和订阅系统,但是因为RPC缺乏流机制导致每次只能返回一个结果。在发布和订阅模式中,由调用者主动发起的发布行为类似一个普通函数调用,而被动的订阅者则类似GRPC客户端单向流中的接收者。现在我们可以尝试基于GRPC的流特性构造一个发布和订阅系统。
214222
Original file line number Diff line number Diff line change 1+ module github.com/chai2010/advanced-go-programming-book
You can’t perform that action at this time.
0 commit comments