1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 04:22:22 +00:00

ch4.4: 包含grpc技术栈图

This commit is contained in:
chai2010 2018-12-12 13:27:11 +08:00
parent c11daa8e46
commit 83d6c77b83
3 changed files with 12 additions and 3 deletions

View File

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

1
go.mod Normal file
View File

@ -0,0 +1 @@
module github.com/chai2010/advanced-go-programming-book

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB